diff --git a/examples/memoryrepo.py b/examples/memoryrepo.py new file mode 100755 index 00000000..7672c6a4 --- /dev/null +++ b/examples/memoryrepo.py @@ -0,0 +1,33 @@ +#!/usr/bin/python +# This script creates a clone of a remote repository in local memory, +# then adds a single file and pushes the result back. +# +# Example usage: +# python examples/memoryrepo.py git+ssh://github.com/jelmer/testrepo + +import stat +import sys + +from dulwich import porcelain +from dulwich.objects import Blob +from dulwich.repo import MemoryRepo + +local_repo = MemoryRepo() +local_repo.refs.set_symbolic_ref(b'HEAD', b'refs/heads/master') +print(local_repo.refs.as_dict()) + +porcelain.fetch(local_repo, sys.argv[1]) +local_repo['refs/heads/master'] = local_repo['refs/remotes/origin/master'] + +last_tree = local_repo[local_repo['HEAD'].tree] +new_blob = Blob.from_string(b'Some contents') +local_repo.object_store.add_object(new_blob) +last_tree.add(b'test', stat.S_IFREG, new_blob.id) +local_repo.object_store.add_object(last_tree) + +local_repo.do_commit( + message=b'Add a file called \'test\'', + ref=b'refs/heads/master', + tree=last_tree.id) + +porcelain.push(local_repo, sys.argv[1], 'master')