git-remote-testgit: import non-HEAD refs

Upon receiving an "import" command, the testgit remote
helper would ignore the ref asked for by git and generate a
fast-export stream based on HEAD. Instead, we should
actually give git the ref it asked for.

This requires adding a new parameter to the export_repo
method in the remote-helpers python library, which may be
used by code outside of git.git. We use a default parameter
so that callers without the new parameter will get the same
behavior as before.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King
2011-07-16 15:03:25 +02:00
committed by Junio C Hamano
parent c00dd33b1f
commit 4e51ba238f
3 changed files with 9 additions and 4 deletions

View File

@ -122,7 +122,7 @@ def do_import(repo, args):
die("Need gitdir to import") die("Need gitdir to import")
repo = update_local_repo(repo) repo = update_local_repo(repo)
repo.exporter.export_repo(repo.gitdir) repo.exporter.export_repo(repo.gitdir, args)
def do_export(repo, args): def do_export(repo, args):

View File

@ -15,7 +15,7 @@ class GitExporter(object):
self.repo = repo self.repo = repo
def export_repo(self, base): def export_repo(self, base, refs=None):
"""Exports a fast-export stream for the given directory. """Exports a fast-export stream for the given directory.
Simply delegates to git fast-epxort and pipes it through sed Simply delegates to git fast-epxort and pipes it through sed
@ -23,8 +23,13 @@ class GitExporter(object):
default refs/heads. This is to demonstrate how the export default refs/heads. This is to demonstrate how the export
data can be stored under it's own ref (using the refspec data can be stored under it's own ref (using the refspec
capability). capability).
If None, refs defaults to ["HEAD"].
""" """
if not refs:
refs = ["HEAD"]
dirname = self.repo.get_base_path(base) dirname = self.repo.get_base_path(base)
path = os.path.abspath(os.path.join(dirname, 'testgit.marks')) path = os.path.abspath(os.path.join(dirname, 'testgit.marks'))
@ -42,7 +47,7 @@ class GitExporter(object):
if os.path.exists(path): if os.path.exists(path):
args.append("--import-marks=" + path) args.append("--import-marks=" + path)
args.append("HEAD") args.extend(refs)
p1 = subprocess.Popen(args, stdout=subprocess.PIPE) p1 = subprocess.Popen(args, stdout=subprocess.PIPE)

View File

@ -85,7 +85,7 @@ test_expect_success 'pushing remote local repo' '
compare_refs clone HEAD server HEAD compare_refs clone HEAD server HEAD
' '
test_expect_failure 'fetch new branch' ' test_expect_success 'fetch new branch' '
(cd public && (cd public &&
git checkout -b new && git checkout -b new &&
echo content >>file && echo content >>file &&