diff options
-rw-r--r-- | gitosis/repository.py | 16 | ||||
-rw-r--r-- | gitosis/test/test_repository.py | 28 |
2 files changed, 40 insertions, 4 deletions
diff --git a/gitosis/repository.py b/gitosis/repository.py index 18a789c..092e41d 100644 --- a/gitosis/repository.py +++ b/gitosis/repository.py @@ -63,6 +63,7 @@ def fast_import( commit_msg, committer, files, + parent=None, ): """ Create an initial commit. @@ -97,10 +98,17 @@ committer %(committer)s now data %(commit_msg_len)d %(commit_msg)s """ % dict( - committer=committer, - commit_msg_len=len(commit_msg), - commit_msg=commit_msg, - )) + committer=committer, + commit_msg_len=len(commit_msg), + commit_msg=commit_msg, + )) + if parent is not None: + assert not parent.startswith(':') + child.stdin.write("""\ +from %(parent)s +""" % dict( + parent=parent, + )) for index, (path, content) in enumerate(files): child.stdin.write('M 100644 :%d %s\n' % (index+1, path)) child.stdin.close() diff --git a/gitosis/test/test_repository.py b/gitosis/test/test_repository.py index b7338e5..6ce4129 100644 --- a/gitosis/test/test_repository.py +++ b/gitosis/test/test_repository.py @@ -313,3 +313,31 @@ exec git "$@" got = readFile(os.path.join(tmp, 'cookie')) eq(got, magic_cookie) +def test_fast_import_parent(): + tmp = maketemp() + path = os.path.join(tmp, 'repo.git') + repository.init(path=path) + repository.fast_import( + git_dir=path, + commit_msg='foo initial bar', + committer='Mr. Unit Test <unit.test@example.com>', + files=[ + ('foo', 'bar\n'), + ], + ) + repository.fast_import( + git_dir=path, + commit_msg='another', + committer='Sam One Else <sam@example.com>', + parent='refs/heads/master^0', + files=[ + ('quux', 'thud\n'), + ], + ) + export = os.path.join(tmp, 'export') + repository.export( + git_dir=path, + path=export, + ) + eq(sorted(os.listdir(export)), + sorted(['foo', 'quux'])) |