From 818c96f8830ab820af780262154e9571239af6c6 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Sun, 28 Dec 2008 23:32:49 -0500 Subject: [PATCH] Remove old migration script. svn path=/trunk/scripts/git-migration/; revision=1940 --- filter-subdirs | 21 ------- git-migrate | 183 -------------------------------------------------------- 2 files changed, 204 deletions(-) delete mode 100755 filter-subdirs delete mode 100755 git-migrate diff --git a/filter-subdirs b/filter-subdirs deleted file mode 100755 index b6a1369..0000000 --- a/filter-subdirs +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/python - -import sys -import os -import subprocess - -tree = sys.argv[1] -package = os.environ['PACKAGE'] - -p = subprocess.Popen(['git', 'ls-tree', - tree, - package], - stdout=subprocess.PIPE, - stdin=subprocess.PIPE) -p.wait() -t = p.stdout.read().strip().split() - -if t != [] and t[1] == 'tree': - tree = t[2] - -os.execvp('git', ['git', 'commit-tree', tree] + sys.argv[2:]) diff --git a/git-migrate b/git-migrate deleted file mode 100755 index 52204b2..0000000 --- a/git-migrate +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/python - -import glob -import os -import sys -import subprocess -import shutil - -def tagBase(pkg): - p = subprocess.Popen(['git', 'tag', - '-l', - 'base'], - cwd='%s.git' % pkg, - stdout=subprocess.PIPE) - p.wait() - if p.stdout.read().strip() != '': - return - - p = subprocess.Popen(['git', 'rev-list', - '--reverse', - 'master'], - cwd='%s.git' % pkg, - stdout=subprocess.PIPE) - p.wait() - base = p.stdout.read().split()[0] - - subprocess.check_call(['git', 'tag', - 'base', - base], - cwd='%s.git' % pkg) - -def clonePackage(base, repo_path): - pkg = os.path.basename(repo_path) - - if not os.path.isdir('%s.git' % pkg): - if os.path.isdir(pkg): - shutil.rmtree(pkg) - - args = [] - args.append('-Ttrunk/%s' % repo_path) - if repo_path.startswith('packages/'): - args.append('-tpackage_tags/%s' % pkg) - args.append(base) - args.append(pkg) - - # Use --no-follow-parent because we're going to handle that with - # grafts. - subprocess.check_call(['git', 'svn', 'clone', - '--no-follow-parent', - '-Aauthors', - '-q', - '--no-metadata'] + args, - stdout=subprocess.PIPE) - - # Then make the repository bare, because git-svn can't do this - shutil.move('%s/.git' % pkg, '%s.git' % pkg) - shutil.rmtree(pkg) - subprocess.check_call(['git', 'config', 'core.bare', 'true'], - cwd='%s.git' % pkg) - - # Some of these repos have a rev where everything was deleted - # as a result of the move. We don't want that rev to exist. - p = subprocess.Popen(['git', 'ls-tree', 'HEAD'], - cwd='%s.git' % pkg, - stdout=subprocess.PIPE) - p.wait() - if len(p.stdout.read()) == 0: - subprocess.check_call(['git', 'reset', '--soft', 'HEAD^'], - cwd='%s.git' % pkg) - - # Early in the project's history, there were a bunch of double - # directory trees - i.e. the source was actually in - # trunk/packages/$package/$package. Correct for that - cwd = os.getcwd() - os.environ['PACKAGE'] = pkg - p = subprocess.check_call(['git', 'filter-branch', - '--commit-filter', '%s "$@"' % os.path.join(cwd, 'filter-subdirs'), - '--tag-name-filter', 'cat', - '--', - '--all'], - cwd='%s.git' % pkg) - - shutil.rmtree('%s.git/refs/original' % pkg, True) - - tagBase(pkg) - -def cloneAllPackages(base): - for pkg in open('package-list'): - clonePackage(base, pkg.strip()) - -def mergeHistory(old_pkg, new_pkg, n): - n = int(n) - - subprocess.check_call(['git', 'push', - '../%s.git' % new_pkg, - 'master:refs/heads/%s' % old_pkg], - cwd='%s.git' % old_pkg) - - # Find the merge commit - if n == 0: - p = subprocess.Popen(['git', 'rev-parse', - 'base'], - cwd='%s.git' % new_pkg, - stdout=subprocess.PIPE) - else: - p = subprocess.Popen(['git', 'rev-list', - '--reverse', - '--boundary', - '--skip=%s' % (n - 1), - 'base..master'], - cwd='%s.git' % new_pkg, - stdout=subprocess.PIPE) - p.wait() - new_rev = p.stdout.read().split()[0].strip('-') - - # Find any other parents of the merge commit - p = subprocess.Popen(['git', 'log', - '-1', - '--pretty=format:%P', - new_rev], - cwd='%s.git' % new_pkg, - stdout=subprocess.PIPE) - p.wait() - parents = p.stdout.read().split() - - # Find the additional parent we're adding - p = subprocess.Popen(['git', 'rev-parse', - old_pkg], - cwd='%s.git' % new_pkg, - stdout=subprocess.PIPE) - p.wait() - parents.append(p.stdout.read().strip()) - - # Write out the grafts file - f = open('%s.git/info/grafts' % new_pkg, 'a') - print >>f, '%s %s' % (new_rev, ' '.join(parents)) - f.close() - - # Run filter-branch - subprocess.call(['git', 'filter-branch', - '--tag-name-filter', 'cat', - '--', - '--all'], - cwd='%s.git' % new_pkg) - - subprocess.call(['git', 'branch', - '-D', - old_pkg], - cwd='%s.git' % new_pkg) - shutil.rmtree('%s.git/refs/original' % new_pkg, True) - -def mergeHistories(): - merges = [] - for line in open('merges'): - line = line.strip() - if line == '' or line[0] == '#': - continue - - merges.append(line.split()) - - for merge in merges: - mergeHistory(*merge) - - for merge in merges: - shutil.rmtree('%s.git' % merge[0]) - -def cleanupRepos(): - for pkg in glob.glob('*.git'): - subprocess.check_call(['git', 'tag', '-d', 'base'], - cwd='%s' % pkg) - - subprocess.check_call(['git', 'gc'], - cwd='%s' % pkg) - -if __name__ == '__main__': - try: - base = sys.argv[1] - except: - base = 'svn://invirt.mit.edu' - - cloneAllPackages(base) - mergeHistories() - cleanupRepos() -- 1.7.9.5