# HG changeset patch # User Abderrahim Kitouni <a.kitouni@gmail.com> # Date 1248334700 -3600 # Thu Jul 23 08:38:20 2009 +0100 # Node ID 211fa793d74ff76067b7347e416e65016e0e9bc0 # Parent 89dcbfaca32b038a010b264372838dea0c11f4a3 support local git repositories (fixes issue 5 bb) diff --git a/__init__.py b/__init__.py --- a/__init__.py +++ b/__init__.py @@ -14,8 +14,12 @@ ''' -from mercurial import commands, extensions, hg +from mercurial import commands, extensions, hg, util from mercurial.i18n import _ + +from dulwich.repo import Repo +from dulwich.errors import NotGitRepository + import gitrepo, hgrepo from git_handler import GitHandler @@ -24,6 +28,18 @@ hg.schemes['git'] = gitrepo hg.schemes['git+ssh'] = gitrepo +_oldlocal = hg.schemes['file'] + +def _local(path): + p = util.drop_scheme('file', path) + try: + Repo(p) + return gitrepo + except NotGitRepository: + return _oldlocal(path) + +hg.schemes['file'] = _local + def reposetup(ui, repo): klass = hgrepo.generate_repo_subclass(repo.__class__) repo.__class__ = klass diff --git a/tests/test-git-clone b/tests/test-git-clone --- a/tests/test-git-clone +++ b/tests/test-git-clone @@ -37,20 +37,11 @@ git add beta commit -m 'add beta' -# dulwich does not presently support local git repos, workaround cd .. -git daemon --base-path="$(pwd)"\ - --listen=localhost\ - --export-all\ - --pid-file=gitdaemon.pid \ - --detach --reuseaddr -hg clone git://localhost/gitrepo hgrepo +hg clone gitrepo hgrepo cd hgrepo hg log --graph echo % we should have some bookmarks hg book - -cd .. -kill `cat gitdaemon.pid` diff --git a/tests/test-git-clone.out b/tests/test-git-clone.out --- a/tests/test-git-clone.out +++ b/tests/test-git-clone.out @@ -1,6 +1,6 @@ Initialized empty Git repository in gitrepo/.git/ -fetching from : git://localhost/gitrepo +fetching from : gitrepo importing Hg objects into Git Counting objects: 6, done. Compressing objects: 33% (1/3) Compressing objects: 66% (2/3) Compressing objects: 100% (3/3) Compressing objects: 100% (3/3), done.