source: trunk/scripts/git-migration/git-migrate @ 1890

Last change on this file since 1890 was 1890, checked in by broder, 15 years ago

I'm not happy with the semantics of that first go at
mergeHistory. Let's try again

  • Property svn:executable set to *
File size: 2.1 KB
Line 
1#!/usr/bin/python
2
3import os
4import sys
5import subprocess
6import shutil
7
8def clonePackage(base, pkg):
9    if not os.path.isdir('%s.git' % pkg):
10        if os.path.isdir(pkg):
11            shutil.rmtree(pkg)
12        # Use --no-follow-parent because we're going to handle that with
13        # grafts.
14        subprocess.check_call(['git', 'svn', 'clone',
15                               '--no-follow-parent',
16                               '-Aauthors',
17                               '-q',
18                               '--no-metadata',
19                               '%s/packages/%s' % (base, pkg)],
20                              stdout=subprocess.PIPE)
21       
22        # Then make the repository bare, because git-svn can't do this
23        shutil.move('%s/.git' % pkg, '%s.git' % pkg)
24        shutil.rmtree(pkg)
25        subprocess.check_call(['git', 'config', 'core.bare', 'true'],
26                              cwd='%s.git' % pkg)
27       
28    # Some of these repos have a rev where everything was deleted
29    # as a result of the move. We don't want that rev to exist.
30    p = subprocess.Popen(['git', 'ls-files'],
31                         cwd='%s.git' % pkg,
32                         stdout=subprocess.PIPE)
33    p.wait()
34    if len(p.stdout.read()) == 0:
35        subprocess.check_call(['git', 'reset', '--soft', 'HEAD^'],
36                              cwd='%s.git' % pkg)
37
38def cloneAllPackages(base):
39    for pkg in open('package-list'):
40        clonePackage(base, pkg.strip())
41
42def mergeHistory(old_pkg, new_pkg, n):
43    cwd = os.getcwd()
44    subprocess.check_call(['git', 'push',
45                           'file:///%s/%s.git' % (cwd, new_pkg),
46                           'master:refs/heads/%s' % old_pkg],
47                          cwd='%s.git' % old_pkg)
48
49def mergeHistories():
50    merges = []
51    for line in open('merges'):
52        line = line.strip()
53        if line == '' or line[0] == '#':
54            continue
55       
56        merges.append(line.split())
57   
58    for merge in merges:
59        mergeHistory(*merge)
60
61if __name__ == '__main__':
62    try:
63        base = sys.argv[1]
64    except:
65        base = 'svn://invirt.mit.edu/trunk'
66   
67    cloneAllPackages(base)
68    mergeHistories()
Note: See TracBrowser for help on using the repository browser.