chiark / gitweb /
Add --stat option to show
[stgit] / perf / create_synthetic_repo.py
1 next_mark = 1
2 def get_mark():
3     global next_mark
4     next_mark += 1
5     return (next_mark - 1)
6
7 def write_data(s):
8     print 'data %d' % len(s)
9     print s
10
11 def write_blob(s):
12     print 'blob'
13     m = get_mark()
14     print 'mark :%d' % m
15     write_data(s)
16     return m
17
18 def write_commit(branch, files, msg, parent = None):
19     print 'commit %s' % branch
20     m = get_mark()
21     print 'mark :%d' % m
22     auth = 'X Ample <xa@example.com> %d +0000' % (1000000000 + m)
23     print 'author %s' % auth
24     print 'committer %s' % auth
25     write_data(msg)
26     if parent != None:
27         print 'from :%d' % parent
28     for fn, fm in sorted(files.iteritems()):
29         print 'M 100644 :%d %s' % (fm, fn)
30     return m
31
32 def set_ref(ref, mark):
33     print 'reset %s' % ref
34     print 'from :%d' % mark
35
36 def stdblob(fn):
37     return ''.join('%d %s\n' % (x, fn) for x in xrange(10))
38
39 def iter_paths():
40     for i in xrange(32):
41         for j in xrange(32):
42             for k in xrange(32):
43                 yield '%02d/%02d/%02d' % (i, j, k)
44
45 def setup():
46     def t(name): return 'refs/tags/%s' % name
47     files = dict((fn, write_blob(stdblob(fn))) for fn in iter_paths())
48     initial = write_commit(t('bomb-base'), files, 'Initial commit')
49     set_ref(t('bomb-top'), initial)
50     for fn in iter_paths():
51         write_commit(t('bomb-top'),
52                      { fn: write_blob(stdblob(fn) + 'Last line\n') },
53                      'Add last line to %s' % fn)
54     write_commit(t('add-file'), { 'woo-hoo.txt': write_blob('woo-hoo\n') },
55                  'Add a new file', parent = initial)
56     files = dict((fn, write_blob('First line\n' + stdblob(fn)))
57                  for fn in iter_paths())
58     write_commit(t('modify-all'), files, 'Add first line to all files',
59                  parent = initial)
60
61 setup()