X-Git-Url: http://xvm.mit.edu/gitweb/invirt/scripts/git-migration.git/blobdiff_plain/8a400ded68b16317a3e3c96f7bd5cf3d632ebe86..3a8af3a406a188ac520cdfaa457bb853471b613b:/git-migrate diff --git a/git-migrate b/git-migrate index 7440717..458d903 100755 --- a/git-migrate +++ b/git-migrate @@ -27,12 +27,12 @@ def clonePackage(base, 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-files'], + 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', 'HEAD^'], + subprocess.check_call(['git', 'reset', '--soft', 'HEAD^'], cwd='%s.git' % pkg) def cloneAllPackages(base): @@ -40,54 +40,22 @@ def cloneAllPackages(base): clonePackage(base, pkg.strip()) def mergeHistory(old_pkg, new_pkg, n): - cwd = os.getcwd() subprocess.check_call(['git', 'push', - 'file:///%s/%s.git' % (cwd, new_pkg), + '../%s.git' % new_pkg, 'master:refs/heads/%s' % old_pkg], - cwd='%s.git' % new_pkg) - - graft = [] - p = subprocess.Popen(['git', 'rev-list', - '--reverse', - '--skip=%s' % n, - 'master'], - cwd='%s.git' % new_pkg, - stdout=subprocess.PIPE) - p.wait() - new_rev = p.stdout.read().split()[0] - graft.append(new_rev) - - # If n isn't 0, then n has a parent commit already that we - # shouldn't forget about. - if n != 0: - p = subprocess.Popen(['git', 'rev-parse', - '%s^' % new_rev], - cwd='%s.git' % new_pkg, - stdout=subprocess.PIPE) - p.wait() - graft.append(p.stdout.read().strip()) - - # And regardless, the HEAD of old_pkg should be a parent of - # new_pkg - p = subprocess.Popen(['git', 'rev-parse', - 'master'], - cwd='%s.git' % old_pkg, - stdout=subprocess.PIPE) - p.wait() - graft.append(p.stdout.read().strip()) - - f = open('%s.git/info/grafts' % new_pkg, 'a') - - print >>f, ' '.join(graft) + cwd='%s.git' % old_pkg) def mergeHistories(): - for line in open('grafts'): + merges = [] + for line in open('merges'): line = line.strip() - if line[0] == '#' or line == '': + if line == '' or line[0] == '#': continue - old_pkg, new_pkg, n = line.split() - mergeHistory(old_pkg, new_pkg, int(n)) + merges.append(line.split()) + + for merge in merges: + mergeHistory(*merge) if __name__ == '__main__': try: