X-Git-Url: http://xvm.mit.edu/gitweb/invirt/scripts/git-migration.git/blobdiff_plain/28c4d680f6f0c02ae58385c04250f244dc605ec3..ffcef9bdd3a5ebba7e16447d3025662656e70f05:/git-migrate?ds=sidebyside diff --git a/git-migrate b/git-migrate index b79053a..796f937 100755 --- a/git-migrate +++ b/git-migrate @@ -44,16 +44,63 @@ def mergeHistory(old_pkg, new_pkg, n): subprocess.check_call(['git', 'push', 'file:///%s/%s.git' % (cwd, new_pkg), 'master:refs/heads/%s' % old_pkg], - cwd=new_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) def mergeHistories(): - for line in open('grafts'): + merges = [] + for line in open('merges'): line = line.strip() if line[0] == '#' or line == '': 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) + + for line in open('package-list'): + line = line.strip() + subprocess.check_call(['git', 'filter-branch', + '--', + '--all'], + cwd='%s.git' % line) + + for merge in merges: + shutil.rmtree('%s.git' % merge[0]) if __name__ == '__main__': try: