summaryrefslogtreecommitdiff
path: root/git_remote_helpers/git
diff options
context:
space:
mode:
Diffstat (limited to 'git_remote_helpers/git')
-rw-r--r--git_remote_helpers/git/__init__.py5
-rw-r--r--git_remote_helpers/git/git.py2
-rw-r--r--git_remote_helpers/git/importer.py30
3 files changed, 34 insertions, 3 deletions
diff --git a/git_remote_helpers/git/__init__.py b/git_remote_helpers/git/__init__.py
index e69de29bb2..1dbb1b0148 100644
--- a/git_remote_helpers/git/__init__.py
+++ b/git_remote_helpers/git/__init__.py
@@ -0,0 +1,5 @@
+import sys
+if sys.hexversion < 0x02040000:
+ # The limiter is the subprocess module
+ sys.stderr.write("git_remote_helpers: requires Python 2.4 or later.\n")
+ sys.exit(1)
diff --git a/git_remote_helpers/git/git.py b/git_remote_helpers/git/git.py
index a383e6c08d..007a1bfdf3 100644
--- a/git_remote_helpers/git/git.py
+++ b/git_remote_helpers/git/git.py
@@ -54,7 +54,7 @@ def valid_git_ref (ref_name):
# The following is a reimplementation of the git check-ref-format
# command. The rules were derived from the git check-ref-format(1)
# manual page. This code should be replaced by a call to
- # check_ref_format() in the git library, when such is available.
+ # check_refname_format() in the git library, when such is available.
if ref_name.endswith('/') or \
ref_name.startswith('.') or \
ref_name.count('/.') or \
diff --git a/git_remote_helpers/git/importer.py b/git_remote_helpers/git/importer.py
index 02a719ac02..e28cc8f986 100644
--- a/git_remote_helpers/git/importer.py
+++ b/git_remote_helpers/git/importer.py
@@ -1,7 +1,7 @@
import os
import subprocess
-from git_remote_helpers.util import check_call
+from git_remote_helpers.util import check_call, check_output
class GitImporter(object):
@@ -16,6 +16,18 @@ class GitImporter(object):
self.repo = repo
+ def get_refs(self, gitdir):
+ """Returns a dictionary with refs.
+ """
+ args = ["git", "--git-dir=" + gitdir, "for-each-ref", "refs/heads"]
+ lines = check_output(args).strip().split('\n')
+ refs = {}
+ for line in lines:
+ value, name = line.split(' ')
+ name = name.strip('commit\t')
+ refs[name] = value
+ return refs
+
def do_import(self, base):
"""Imports a fast-import stream to the given directory.
@@ -27,14 +39,28 @@ class GitImporter(object):
gitdir = self.repo.gitpath
else:
gitdir = os.path.abspath(os.path.join(dirname, '.git'))
- path = os.path.abspath(os.path.join(dirname, 'git.marks'))
+ path = os.path.abspath(os.path.join(dirname, 'testgit.marks'))
if not os.path.exists(dirname):
os.makedirs(dirname)
+ refs_before = self.get_refs(gitdir)
+
args = ["git", "--git-dir=" + gitdir, "fast-import", "--quiet", "--export-marks=" + path]
if os.path.exists(path):
args.append("--import-marks=" + path)
check_call(args)
+
+ refs_after = self.get_refs(gitdir)
+
+ changed = {}
+
+ for name, value in refs_after.iteritems():
+ if refs_before.get(name) == value:
+ continue
+
+ changed[name] = value
+
+ return changed