Commits

David Carr committed 5d17fc7

remove patches that were accepted, update WIP

Comments (0)

Files changed (23)

buglink.diff

-# HG changeset patch
-# Parent 3b82cf6ac73ad8455a632516735070610eb5cd32
-docs: include buglink
-
-Mercurial has support for including a link to an issue tracker when it detects
-that an extension has broken.  This change includes the appropriate attribute
-in the extension, pointing it at the issue tracker for the main BitBucket repo.
-
-diff -r 3b82cf6ac73a -r 2f7be60fe85b hggit/__init__.py
---- a/hggit/__init__.py	Sun Sep 16 14:46:18 2012 -0500
-+++ b/hggit/__init__.py	Thu Sep 27 18:21:04 2012 -0400
-@@ -42,6 +42,8 @@
- import gitrepo, hgrepo
- from git_handler import GitHandler
- 
-+buglink = 'https://bitbucket.org/durin42/hg-git/issues'
-+
- # support for `hg clone git://github.com/defunkt/facebox.git`
- # also hg clone git+ssh://git@github.com/schacon/simplegit.git
- _gitschemes = ('git', 'git+ssh', 'git+http', 'git+https')

fix-no-changes-outgoing-b.diff

-# HG changeset patch
-# Parent 471338caeea1e5ae33013cfc852ac175bc08a74d
-TODO
-
-diff -r 471338caeea1 -r 303933e01d96 tests/test-bookmark-workflow.t
---- a/tests/test-bookmark-workflow.t	Thu Sep 27 20:23:02 2012 -0400
-+++ b/tests/test-bookmark-workflow.t	Thu Sep 27 20:23:49 2012 -0400
-@@ -102,6 +102,7 @@
-   searching for changes
-   no changes found
-   [1]
-+  $ hg outgoing -B
-   $ hg push
-   pushing to $TESTTMP/hgremoterepo
-   searching for changes
-@@ -114,6 +115,7 @@
-   searching for changes
-   no changes found
-   [1]
-+  $ hg outgoing -B
-   $ hg push
-   pushing to $TESTTMP/gitremoterepo
-   creating and sending data

fix-no-changes-push.diff

 # HG changeset patch
-# Parent d1bd9d33c8b6206358ed471415fc5af9889d2748
-TODO
+# Parent 4032fd16cb2625ed6435e12efcbcedd8a7a00018
+push: change "no changes" default output to match normal mercurial
 
-diff -r d1bd9d33c8b6 hggit/git_handler.py
---- a/hggit/git_handler.py	Thu Sep 27 19:26:20 2012 -0400
-+++ b/hggit/git_handler.py	Thu Sep 27 20:22:36 2012 -0400
-@@ -247,6 +247,10 @@
-     def push(self, remote, revs, force):
-         self.export_commits()
-         old_refs, new_refs = self.upload_pack(remote, revs, force)
-+        print 'old:'
-+        print old_refs
-+        print 'new:'
-+        print new_refs
-         remote_name = self.remote_name(remote)
+The output for "hg push" when there were no changes didn't quite match between
+Mercurial with and without Hg-Git, so I changed the behavior to bring it into
+synch.  The existing "creating and sending data" message was changed to be
+included if --verbose is specified.
+
+diff --git a/hggit/git_handler.py b/hggit/git_handler.py
+--- a/hggit/git_handler.py
++++ b/hggit/git_handler.py
+@@ -839,7 +839,8 @@
  
-         if remote_name and new_refs:
-@@ -834,9 +838,13 @@
-     ## PACK UPLOADING AND FETCHING
+         genpack = self.git.object_store.generate_pack_contents
+         try:
+-            self.ui.status(_("creating and sending data\n"))
++            self.ui.status(_("searching for changes\n"))
++            self.ui.note(_("creating and sending data\n"))
+             new_refs = client.send_pack(path, changed, genpack)
+             return old_refs, new_refs
+         except (HangupException, GitProtocolError), e:
+diff --git a/tests/test-conflict-1.t b/tests/test-conflict-1.t
+old mode 100755
+new mode 100644
+--- a/tests/test-conflict-1.t
++++ b/tests/test-conflict-1.t
+@@ -61,7 +61,7 @@
+   $ hg push -r master ../gitrepo
+   pushing to ../gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+   $ cd ..
  
-     def upload_pack(self, remote, revs, force):
-+        print 'revs'
-+        print revs
-         client, path = self.get_transport_and_path(remote)
-         old_refs = {}
-         def changed(refs):
-+            print 'changed:in:'
-+            print refs
-             old_refs.update(refs)
-             to_push = revs or set(self.local_heads().values() + self.tags.values())
-             return self.get_changed_refs(refs, to_push, force)
-diff -r d1bd9d33c8b6 tests/test-bookmark-workflow.t
---- a/tests/test-bookmark-workflow.t	Thu Sep 27 19:26:20 2012 -0400
-+++ b/tests/test-bookmark-workflow.t	Thu Sep 27 20:22:36 2012 -0400
-@@ -102,6 +102,11 @@
-   searching for changes
+   $ hg clone gitrepo hgrepo2 | grep -v '^updating'
+diff --git a/tests/test-conflict-2.t b/tests/test-conflict-2.t
+old mode 100755
+new mode 100644
+--- a/tests/test-conflict-2.t
++++ b/tests/test-conflict-2.t
+@@ -61,7 +61,7 @@
+   $ hg push -r master ../gitrepo
+   pushing to ../gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+   $ cd ..
+ 
+   $ hg clone gitrepo hgrepo2 | grep -v '^updating'
+diff --git a/tests/test-convergedmerge.t b/tests/test-convergedmerge.t
+old mode 100755
+new mode 100644
+--- a/tests/test-convergedmerge.t
++++ b/tests/test-convergedmerge.t
+@@ -62,7 +62,7 @@
+   $ hg push -r master ../gitrepo
+   pushing to ../gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+   $ cd ..
+ 
+   $ hg clone gitrepo hgrepo2 | grep -v '^updating'
+diff --git a/tests/test-empty-working-tree.t b/tests/test-empty-working-tree.t
+old mode 100755
+new mode 100644
+--- a/tests/test-empty-working-tree.t
++++ b/tests/test-empty-working-tree.t
+@@ -40,7 +40,7 @@
+   $ hg push ../gitrepo2
+   pushing to ../gitrepo2
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+ 
+   $ cd ../gitrepo2
+   $ git log --pretty=medium
+diff --git a/tests/test-encoding.t b/tests/test-encoding.t
+old mode 100755
+new mode 100644
+--- a/tests/test-encoding.t
++++ b/tests/test-encoding.t
+@@ -122,7 +122,7 @@
+   $ hg push ../gitrepo2
+   pushing to ../gitrepo2
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+ 
+   $ cd ../gitrepo2
+   $ git log --pretty=medium
+diff --git a/tests/test-file-removal.t b/tests/test-file-removal.t
+old mode 100755
+new mode 100644
+--- a/tests/test-file-removal.t
++++ b/tests/test-file-removal.t
+@@ -109,7 +109,7 @@
+   $ hg push ../gitrepo2
+   pushing to ../gitrepo2
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+ 
+   $ cd ../gitrepo2
+   $ git log --pretty=medium
+diff --git a/tests/test-git-tags.t b/tests/test-git-tags.t
+old mode 100755
+new mode 100644
+--- a/tests/test-git-tags.t
++++ b/tests/test-git-tags.t
+@@ -72,7 +72,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:3b7fd1b3
+ 
+   $ cd ..
+diff --git a/tests/test-hg-author.t b/tests/test-hg-author.t
+old mode 100755
+new mode 100644
+--- a/tests/test-hg-author.t
++++ b/tests/test-hg-author.t
+@@ -55,7 +55,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:cffa0e8d
+ 
+   $ echo gamma >> beta
+@@ -63,7 +63,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:2b9ec6a4
+ 
+   $ echo gamma > gamma
+@@ -72,7 +72,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:fee30180
+ 
+   $ echo delta > delta
+@@ -81,7 +81,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:d1659250
+ 
+   $ echo epsilon > epsilon
+@@ -90,7 +90,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:ee985f12
+ 
+   $ echo zeta > zeta
+@@ -99,7 +99,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:d21e26b4
+ 
+   $ echo eta > eta
+@@ -108,7 +108,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:8c878c97
+ 
+   $ echo theta > theta
+@@ -117,7 +117,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:1e03e913
+ 
+   $ hg log --graph | egrep -v ': *(not-master|master)'
+diff --git a/tests/test-hg-branch.t b/tests/test-hg-branch.t
+old mode 100755
+new mode 100644
+--- a/tests/test-hg-branch.t
++++ b/tests/test-hg-branch.t
+@@ -58,7 +58,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:05c2bcbe
+ 
+   $ hg branch gamma | grep -v 'permanent and global'
+@@ -67,7 +67,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:296802ef
+ 
+   $ hg log --graph | $filterhash | egrep -v ': *(not-master|master)'
+diff --git a/tests/test-hg-tags.t b/tests/test-hg-tags.t
+old mode 100755
+new mode 100644
+--- a/tests/test-hg-tags.t
++++ b/tests/test-hg-tags.t
+@@ -53,7 +53,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/tags/alpha => GIT:7eeab2ea
+       default::refs/heads/master => GIT:9a2616b9
+ 
+diff --git a/tests/test-merge.t b/tests/test-merge.t
+old mode 100755
+new mode 100644
+--- a/tests/test-merge.t
++++ b/tests/test-merge.t
+@@ -70,7 +70,7 @@
+   $ hg push ../gitrepo2
+   pushing to ../gitrepo2
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+ 
+   $ cd ..
+   $ cd gitrepo2
+diff --git a/tests/test-octopus.t b/tests/test-octopus.t
+old mode 100755
+new mode 100644
+--- a/tests/test-octopus.t
++++ b/tests/test-octopus.t
+@@ -97,7 +97,7 @@
+   $ hg push ../gitrepo2
+   pushing to ../gitrepo2
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+ 
+   $ cd ../gitrepo2
+   $ git log --pretty=medium | sed s/\\.\\.\\.//g
+diff --git a/tests/test-push.t b/tests/test-push.t
+old mode 100755
+new mode 100644
+--- a/tests/test-push.t
++++ b/tests/test-push.t
+@@ -60,7 +60,7 @@
+   $ hg push -r beta
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+       default::refs/heads/beta => GIT:cffa0e8d
+ 
+   $ cd ..
+@@ -90,7 +90,7 @@
+   % this should fail
+   $ hg push -r master
+   pushing to $TESTTMP/gitrepo
+-  creating and sending data
++  searching for changes
+   abort: refs/heads/master changed on the server, please pull and merge before pushing
+   [255]
+ 
+@@ -98,7 +98,7 @@
+   % ... even with -f
+   $ hg push -fr master
+   pushing to $TESTTMP/gitrepo
+-  creating and sending data
++  searching for changes
+   abort: refs/heads/master changed on the server, please pull and merge before pushing
+   [255]
+ 
+@@ -131,7 +131,7 @@
+   % this should also fail
+   $ hg push -r master
+   pushing to $TESTTMP/gitrepo
+-  creating and sending data
++  searching for changes
+   abort: pushing refs/heads/master overwrites 72f56395749d
+   [255]
+ 
+@@ -139,7 +139,7 @@
+   % ... but succeed with -f
+   $ hg push -fr master
+   pushing to $TESTTMP/gitrepo
+-  creating and sending data
++  searching for changes
+       default::refs/heads/master => GIT:cc119202
+ 
+   $ echo % this should fail, no changes to push
+@@ -148,7 +148,7 @@
+ issue3228 was fixed in 2.1
+   $ hg push -r master && false
+   pushing to $TESTTMP/gitrepo
+-  creating and sending data
++  searching for changes
    no changes found
    [1]
-+  $ hg push
-+  pushing to $TESTTMP/hgremoterepo
+ 
+diff --git a/tests/test-subrepos.t b/tests/test-subrepos.t
+--- a/tests/test-subrepos.t
++++ b/tests/test-subrepos.t
+@@ -116,7 +116,7 @@
+   $ hg push
+   pushing to $TESTTMP/gitrepo1
+   exporting hg objects to git
+-  creating and sending data
 +  searching for changes
-+  no changes found
-+  [1]
+       default::refs/heads/master => GIT:4663c492
    $ cd ..
-   $ cd hggitlocalrepo
-   $ hg outgoing
-@@ -109,4 +114,8 @@
-   searching for changes
-   no changes found
-   [1]
-+  $ hg push
-+  pushing to $TESTTMP/gitremoterepo
-+  creating and sending data
-+      default::refs/heads/b1 => GIT:9497a4ee
-   $ cd ..
+   $ cd gitrepo1
+diff --git a/tests/test-tree-decomposition.t b/tests/test-tree-decomposition.t
+old mode 100755
+new mode 100644
+--- a/tests/test-tree-decomposition.t
++++ b/tests/test-tree-decomposition.t
+@@ -68,7 +68,7 @@
+   $ hg push ../gitrepo2
+   pushing to ../gitrepo2
+   exporting hg objects to git
+-  creating and sending data
++  searching for changes
+ 
+   $ cd ../gitrepo2
+   $ git log --pretty=medium

fix-outgoing.diff

-# HG changeset patch
-# Parent 3b82cf6ac73ad8455a632516735070610eb5cd32
-outgoing: don't delete remote refs
-
-There was a bug introduced in 8c1f2b07c04b such that calling hg outgoing on
-a Git repository would result in all refs being deleted from the remote
-repository (with the possible exception of the currently checked out branch).
-It wasn't noticed before because the existing test for outgoing didn't actually
-verify the refs on the remote.  This changeset fixes the bug, as well as adding
-test coverage to allow verifying that the fix works.
-
-diff -r 3b82cf6ac73a -r f6871baa79c9 hggit/git_handler.py
---- a/hggit/git_handler.py	Sun Sep 16 14:46:18 2012 -0500
-+++ b/hggit/git_handler.py	Thu Sep 27 22:32:01 2012 -0400
-@@ -222,14 +222,10 @@
-             old_refs.update(refs)
-             to_push = set(self.local_heads().values() + self.tags.values())
-             new_refs.update(self.get_changed_refs(refs, to_push, True))
--            # don't push anything
--            return {}
-+            return refs # always return the same refs to make the send a no-op
- 
-         try:
--            try:
--                client.send_pack(path, changed, lambda have, want: [])
--            except UpdateRefsError:
--                pass # dulwich throws an error when send_pack doesn't upload
-+            client.send_pack(path, changed, lambda have, want: [])
- 
-             changed_refs = [ref for ref, sha in new_refs.iteritems()
-                             if sha != old_refs.get(ref)]
-diff -r 3b82cf6ac73a -r f6871baa79c9 tests/test-outgoing.t
---- a/tests/test-outgoing.t	Sun Sep 16 14:46:18 2012 -0500
-+++ b/tests/test-outgoing.t	Thu Sep 27 22:32:01 2012 -0400
-@@ -35,6 +35,10 @@
-   $ echo alpha > alpha
-   $ git add alpha
-   $ commit -m "add alpha"
-+  $ git branch alpha
-+  $ git show-ref
-+  7eeab2ea75ec1ac0ff3d500b5b6f8a3447dd7c03 refs/heads/alpha
-+  7eeab2ea75ec1ac0ff3d500b5b6f8a3447dd7c03 refs/heads/master
- 
-   $ cd ..
-   $ hg clone gitrepo hgrepo | grep -v '^updating'
-@@ -42,6 +46,7 @@
-   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- 
-   $ cd hgrepo
-+  $ hg update -q master
-   $ echo beta > beta
-   $ hg add beta
-   $ hgcommit -m 'add beta'
-@@ -99,6 +104,11 @@
-   % some more work on master from git
-   $ cd gitrepo
- 
-+Check state of refs after outgoing
-+  $ git show-ref
-+  7eeab2ea75ec1ac0ff3d500b5b6f8a3447dd7c03 refs/heads/alpha
-+  7eeab2ea75ec1ac0ff3d500b5b6f8a3447dd7c03 refs/heads/master
-+
-   $ git checkout master 2>&1 | sed s/\'/\"/g
-   Already on "master"
-   $ echo delta > delta

fix-push-output.diff

+# HG changeset patch
+# Parent 631c4c3b2fa099c8a0571740459250006d3aad93
+push: produce less output by default
+
+When communicating with the user on push, Mercurial doesn't show much on
+success.  Currently, Hg-Git shows every changed ref.  After this change,
+the default output will more closely match Mercurial's regular behavior (no
+per-ref output), while changed refs will be shown if --verbose is specified,
+and all refs will be shown if --debug is specified.
+
+diff -r 631c4c3b2fa0 hggit/git_handler.py
+--- a/hggit/git_handler.py	Fri Sep 28 21:00:49 2012 -0400
++++ b/hggit/git_handler.py	Fri Sep 28 21:48:24 2012 -0400
+@@ -248,7 +248,10 @@
+         if remote_name and new_refs:
+             for ref, new_sha in new_refs.iteritems():
+                 if new_sha != old_refs.get(ref):
+-                    self.ui.status("    %s::%s => GIT:%s\n" %
++                    self.ui.note("    %s::%s => GIT:%s\n" %
++                                   (remote_name, ref, new_sha[0:8]))
++                else:
++                    self.ui.debug("    %s::%s => GIT:%s\n" %
+                                    (remote_name, ref, new_sha[0:8]))
+ 
+             self.update_remote_branches(remote_name, new_refs)
+diff -r 631c4c3b2fa0 tests/test-git-tags.t
+--- a/tests/test-git-tags.t	Fri Sep 28 21:00:49 2012 -0400
++++ b/tests/test-git-tags.t	Fri Sep 28 21:48:24 2012 -0400
+@@ -73,6 +73,5 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:3b7fd1b3
+ 
+   $ cd ..
+diff -r 631c4c3b2fa0 tests/test-hg-author.t
+--- a/tests/test-hg-author.t	Fri Sep 28 21:00:49 2012 -0400
++++ b/tests/test-hg-author.t	Fri Sep 28 21:48:24 2012 -0400
+@@ -56,7 +56,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:cffa0e8d
+ 
+   $ echo gamma >> beta
+   $ hgcommit -u "test <test@example.com> (comment)" -m 'modify beta'
+@@ -64,7 +63,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:2b9ec6a4
+ 
+   $ echo gamma > gamma
+   $ hg add gamma
+@@ -73,7 +71,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:fee30180
+ 
+   $ echo delta > delta
+   $ hg add delta
+@@ -82,7 +79,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:d1659250
+ 
+   $ echo epsilon > epsilon
+   $ hg add epsilon
+@@ -91,7 +87,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:ee985f12
+ 
+   $ echo zeta > zeta
+   $ hg add zeta
+@@ -100,7 +95,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:d21e26b4
+ 
+   $ echo eta > eta
+   $ hg add eta
+@@ -109,7 +103,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:8c878c97
+ 
+   $ echo theta > theta
+   $ hg add theta
+@@ -118,7 +111,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:1e03e913
+ 
+   $ hg log --graph | egrep -v ': *(not-master|master)'
+   @  changeset:   8:d3c51ce68cfd
+diff -r 631c4c3b2fa0 tests/test-hg-branch.t
+--- a/tests/test-hg-branch.t	Fri Sep 28 21:00:49 2012 -0400
++++ b/tests/test-hg-branch.t	Fri Sep 28 21:48:24 2012 -0400
+@@ -59,7 +59,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:05c2bcbe
+ 
+   $ hg branch gamma | grep -v 'permanent and global'
+   marked working directory as branch gamma
+@@ -68,7 +67,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:296802ef
+ 
+   $ hg log --graph | $filterhash | egrep -v ': *(not-master|master)'
+   @  changeset:   2:05aed681ccb3
+diff -r 631c4c3b2fa0 tests/test-hg-tags.t
+--- a/tests/test-hg-tags.t	Fri Sep 28 21:00:49 2012 -0400
++++ b/tests/test-hg-tags.t	Fri Sep 28 21:48:24 2012 -0400
+@@ -54,8 +54,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/tags/alpha => GIT:7eeab2ea
+-      default::refs/heads/master => GIT:9a2616b9
+ 
+   $ hg log --graph | egrep -v ': *(not-master|master)'
+   @  changeset:   1:d529e9229f6d
+diff -r 631c4c3b2fa0 tests/test-push.t
+--- a/tests/test-push.t	Fri Sep 28 21:00:49 2012 -0400
++++ b/tests/test-push.t	Fri Sep 28 21:48:24 2012 -0400
+@@ -61,7 +61,6 @@
+   pushing to $TESTTMP/gitrepo
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/beta => GIT:cffa0e8d
+ 
+   $ cd ..
+ 
+@@ -140,7 +139,6 @@
+   $ hg push -fr master
+   pushing to $TESTTMP/gitrepo
+   searching for changes
+-      default::refs/heads/master => GIT:cc119202
+ 
+   $ echo % this should fail, no changes to push
+   % this should fail, no changes to push
+diff -r 631c4c3b2fa0 tests/test-subrepos.t
+--- a/tests/test-subrepos.t	Fri Sep 28 21:00:49 2012 -0400
++++ b/tests/test-subrepos.t	Fri Sep 28 21:48:24 2012 -0400
+@@ -117,7 +117,6 @@
+   pushing to $TESTTMP/gitrepo1
+   exporting hg objects to git
+   searching for changes
+-      default::refs/heads/master => GIT:4663c492
+   $ cd ..
+   $ cd gitrepo1
+   $ echo % there shall be two gitlink entries, with values matching that in .hgsubstate

fix-test-subrepos.diff

+# HG changeset patch
+# Parent bd86c0c19fb4126eab5c4256ec31312f93871663
+tests: fix test-subrepos.t sporadically failing
+
+I was seeing sporadic failures running this test on Mac OS X 10.8.
+They looked like this:
++  sed: 1: "s_/private/var/folders/ ...": bad flag in substitute command: 'T'
+
+My assumption is that some character was being included in the path of the
+temporary directory that sed didn't like.  It looks like the sed function was
+being used to eliminate differences between test runs due to the path changing
+each run.  That isn't needed any more now that we're using the unified test
+format, since said replacement is taken care of for us by run-tests.py.  Thus,
+this changeset removes the calls to sed and updates the output to use the result
+from the framework-level replacement.
+
+diff -r bd86c0c19fb4 tests/test-subrepos.t
+--- a/tests/test-subrepos.t	Thu Sep 27 22:52:54 2012 -0400
++++ b/tests/test-subrepos.t	Fri Sep 28 18:15:09 2012 -0400
+@@ -150,19 +150,19 @@
+   pulling from $TESTTMP/gitrepo1
+   importing git objects into hg
+   (run 'hg update' to get a working copy)
+-  $ hg checkout -C  | sed "s_$(dirname $(pwd))_TEMPLOCATION_"
+-  cloning subrepo hgsub from TEMPLOCATION/hgsub
++  $ hg checkout -C
++  cloning subrepo hgsub from $TESTTMP/hgsub
+   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+   $ cd ..
+   $ echo % pull shall bring .hgsub entry which was added to the git repo
+   % pull shall bring .hgsub entry which was added to the git repo
+-  $ cat hgrepo/.hgsub | sed "s_$(pwd)_TEMPLOCATION_"
+-  hgsub = TEMPLOCATION/hgsub
++  $ cat hgrepo/.hgsub
++  hgsub = $TESTTMP/hgsub
+   subrepo1 = [git]../gitsubrepo
+   xyz/subrepo2 = [git]../gitsubrepo
+   $ echo % .hgsubstate shall list revision of the subrepo added through git repo
+   % .hgsubstate shall list revision of the subrepo added through git repo
+-  $ cat hgrepo/.hgsubstate | sed "s_$(pwd)_TEMPLOCATION_"
++  $ cat hgrepo/.hgsubstate
+   481ec30d580f333ae3a77f94c973ce37b69d5bda hgsub
+   56f0304c5250308f14cfbafdc27bd12d40154d17 subrepo1
+   aabf7cd015089aff0b84596e69aa37b24a3d090a xyz/subrepo2

gitrepo-bookmark-support.diff

-# HG changeset patch
-# Parent f40d6c8c0f6c8a8a3bfe054cbe3c22a04aa37d7b
-gitrepo: initial support for bookmarks
-
-diff -r f40d6c8c0f6c hggit/__init__.py
---- a/hggit/__init__.py	Thu Sep 27 18:32:02 2012 -0400
-+++ b/hggit/__init__.py	Thu Sep 27 19:16:05 2012 -0400
-@@ -184,6 +184,14 @@
-     # 1.7+
-     pass
- 
-+def peer(orig, uiorrepo, *args, **opts):
-+    newpeer = orig(uiorrepo, *args, **opts)
-+    if isinstance(newpeer, gitrepo.gitrepo):
-+        if isinstance(uiorrepo, localrepo.localrepository):
-+            newpeer.localrepo = uiorrepo
-+    return newpeer
-+extensions.wrapfunction(hg, 'peer', peer)
-+
- def revset_fromgit(repo, subset, x):
-     '''``fromgit()``
-     Select changesets that originate from Git.
-diff -r f40d6c8c0f6c hggit/gitrepo.py
---- a/hggit/gitrepo.py	Thu Sep 27 18:32:02 2012 -0400
-+++ b/hggit/gitrepo.py	Thu Sep 27 19:16:05 2012 -0400
-@@ -1,3 +1,4 @@
-+import os
- from mercurial import util
- try:
-     from mercurial.error import RepoError
-@@ -12,7 +13,7 @@
- from git_handler import GitHandler
- 
- class gitrepo(peerrepository):
--    capabilities = ['lookup']
-+    capabilities = ['lookup', 'pushkey']
- 
-     def _capabilities(self):
-         return self.capabilities
-@@ -22,6 +23,12 @@
-             raise util.Abort('Cannot create a git repository.')
-         self.ui = ui
-         self.path = path
-+        self.git = None
-+        self.localrepo = None
-+
-+    def _initializegit(self):
-+        if self.git is None and self.localrepo is not None:
-+            self.git = GitHandler(self.localrepo, self.ui)
- 
-     def url(self):
-         return self.path
-@@ -38,6 +45,26 @@
-         return []
- 
-     def listkeys(self, namespace):
-+        if namespace == 'namespaces':
-+            return {'bookmarks':''}
-+        elif namespace == 'bookmarks':
-+            # TODO: reimplement not using tag file, since we won't always have access to repo
-+            self._initializegit()
-+            if self.git is not None:
-+                remote_name = self.git.remote_name(self.path) or 'default'
-+                tagfile = self.localrepo.join(os.path.join('git-remote-refs'))
-+                if os.path.exists(tagfile):
-+                    tf = open(tagfile, 'rb')
-+                    tagdata = tf.read().split('\n')
-+                    td = [line.split(' ', 1) for line in tagdata if line]
-+                    refs = dict([(name, sha) for sha, name in td])
-+                    bookmarks = {}
-+                    for ref, sha in refs.iteritems():
-+                        if ref.startswith(remote_name + '/'):
-+                            bookmarks[ref[len(remote_name)+1:]] = sha
-+                    return bookmarks
-+                else:
-+                    print 'TODO'
-         return {}
- 
-     def pushkey(self, namespace, key, old, new):

gitrepo-support-listkeys.diff

+# HG changeset patch
+# Parent 84852e1209ce2d3de849bf1e339e29e3b59ab0a4
+WIP gitrepo: initial support for listkeys
+
+This changeset adds test coverage for comparing "hg outgoing -B" in normal
+Mercurial usage with Hg-Git usage.  This didn't match, since previously, gitrepo
+didn't provide a meaningful listkeys implementation.  Now, it does.
+
+gitrepo now has access to a GitHandler when a localrepo is available.  This
+handler is used to access the information needed to implement listkeys for
+namespaces (currently, only bookmarks) and bookmarks.
+
+A couple of other tests were testing "divergent bookmark" scenarios.  These
+tests have been updated to filter out the divergent bookmark output, as it isn't
+consistent across the supported Mercurial versions.
+
+diff -r 84852e1209ce hggit/git_handler.py
+--- a/hggit/git_handler.py	Fri Sep 28 21:00:45 2012 -0400
++++ b/hggit/git_handler.py	Sun Oct 07 19:25:55 2012 -0400
+@@ -928,7 +928,7 @@
+         return new_refs
+ 
+ 
+-    def fetch_pack(self, remote_name, heads):
++    def fetch_pack(self, remote_name, heads=None):
+         client, path = self.get_transport_and_path(remote_name)
+         graphwalker = self.git.get_graph_walker()
+         def determine_wants(refs):
+diff -r 84852e1209ce hggit/gitrepo.py
+--- a/hggit/gitrepo.py	Fri Sep 28 21:00:45 2012 -0400
++++ b/hggit/gitrepo.py	Sun Oct 07 19:25:55 2012 -0400
+@@ -1,3 +1,4 @@
++import os
+ from mercurial import util
+ try:
+     from mercurial.error import RepoError
+@@ -11,6 +12,10 @@
+ 
+ from git_handler import GitHandler
+ 
++from overlay import overlayrepo
++
++from mercurial.node import bin
++
+ class gitrepo(peerrepository):
+     capabilities = ['lookup']
+ 
+@@ -23,6 +28,12 @@
+         self.ui = ui
+         self.path = path
+         self.localrepo = None
++        self.handler = None
++
++    def _initializehandler(self):
++        if self.handler is None and self.localrepo is not None:
++            self.handler = GitHandler(self.localrepo, self.localrepo.ui)
++        return self.handler
+ 
+     def url(self):
+         return self.path
+@@ -39,6 +50,58 @@
+         return []
+ 
+     def listkeys(self, namespace):
++        if namespace == 'namespaces':
++            return {'bookmarks':''}
++        elif namespace == 'bookmarks':
++            handler = self._initializehandler()
++            if handler:
++                handler.export_commits()
++                refs = handler.fetch_pack(self.path)
++                #print 'refs:'
++                #print refs
++                reqrefs = refs
++
++                convertlist, commits = handler.getnewgitcommits(reqrefs)
++                #print 'convertlist:'
++                #print convertlist
++                #print 'commits:'
++                #print commits
++                newcommits = [bin(c) for c in commits]
++                b = overlayrepo(handler, newcommits, refs)
++                #print 'moo:'
++                #print b.node('55b133e1d55801b048c1127b797ea3b12aff2ea9')
++                #print b.changelog.rev(hex('55b133e1d55801b048c1127b797ea3b12aff2ea9'))
++                #r[r.find('/', r.find('/')+1)+1:]
++                stripped_refs = dict([
++                    (ref[ref.find('/', ref.find('/')+1)+1:], b.node(refs[ref]))
++                        for ref in refs.keys()
++                            if ref.find('/') != -1])
++                #print 'stripped_refs:'
++                #print stripped_refs
++                #print 'commits:'
++                #print commits
++                #remote_name = self.handler.remote_name(self.path)
++                #print "remote_name:"
++                #print remote_name
++                # TODO DC cleanup or 'default'
++                # TODO DC test with non-named remote
++                # TODO DC do I need to fetch new remotes here?  test with never cloned/pulled
++                #tagfile = self.localrepo.join(os.path.join('git-remote-refs'))
++                #if os.path.exists(tagfile):
++                #    tf = open(tagfile, 'rb')
++                #    tagdata = tf.read().split('\n')
++                #    td = [line.split(' ', 1) for line in tagdata if line]
++                #    refs = dict([(name, sha) for sha, name in td])
++                #    bookmarks = {}
++                #    for ref, sha in refs.iteritems():
++                #        if ref.startswith(remote_name + '/'):
++                #            bookmarks[ref[len(remote_name)+1:]] = sha
++                #    return bookmarks
++                #else:
++                #    return {}
++                #print "gitrepo returning:"
++                #print stripped_refs
++                return stripped_refs
+         return {}
+ 
+     def pushkey(self, namespace, key, old, new):
+diff -r 84852e1209ce hggit/overlay.py
+--- a/hggit/overlay.py	Fri Sep 28 21:00:45 2012 -0400
++++ b/hggit/overlay.py	Sun Oct 07 19:25:55 2012 -0400
+@@ -227,6 +227,12 @@
+             return self.handler.repo[n]
+         return overlaychangectx(self, n)
+ 
++    def node(self, n):
++        """Returns an Hg or Git hash for the specified Git hash"""
++        if bin(n) in self.revmap:
++            return n
++        return self.handler.map_hg_get(n)
++
+     def nodebookmarks(self, n):
+         return self.refmap.get(n, [])
+ 
+diff -r 84852e1209ce tests/test-bookmark-workflow.t
+--- a/tests/test-bookmark-workflow.t	Fri Sep 28 21:00:45 2012 -0400
++++ b/tests/test-bookmark-workflow.t	Sun Oct 07 19:25:55 2012 -0400
+@@ -109,6 +109,11 @@
+   searching for changes
+   no changes found
+   [1]
++  $ hg outgoing -B
++  comparing with $TESTTMP/hgremoterepo
++  searching for changed bookmarks
++  no changed bookmarks found
++  [1]
+   $ hg push
+   pushing to $TESTTMP/hgremoterepo
+   searching for changes
+@@ -121,6 +126,11 @@
+   searching for changes
+   no changes found
+   [1]
++  $ hg outgoing -B
++  comparing with $TESTTMP/gitremoterepo
++  searching for changed bookmarks
++  no changed bookmarks found
++  [1]
+   $ hg push
+   pushing to $TESTTMP/gitremoterepo
+   searching for changes
+diff -r 84852e1209ce tests/test-outgoing.t
+--- a/tests/test-outgoing.t	Fri Sep 28 21:00:45 2012 -0400
++++ b/tests/test-outgoing.t	Sun Oct 07 19:25:55 2012 -0400
+@@ -126,7 +126,7 @@
+   [255]
+   $ echo % let\'s pull and try again
+   % let's pull and try again
+-  $ hg pull
++  $ hg pull 2>&1 | grep -v 'divergent bookmark'
+   pulling from */gitrepo (glob)
+   importing git objects into hg
+   (run 'hg update' to get a working copy)
+diff -r 84852e1209ce tests/test-push.t
+--- a/tests/test-push.t	Fri Sep 28 21:00:45 2012 -0400
++++ b/tests/test-push.t	Sun Oct 07 19:25:55 2012 -0400
+@@ -102,7 +102,7 @@
+   abort: refs/heads/master changed on the server, please pull and merge before pushing
+   [255]
+ 
+-  $ hg pull
++  $ hg pull 2>&1 | grep -v 'divergent bookmark'
+   pulling from $TESTTMP/gitrepo
+   importing git objects into hg
+   (run 'hg update' to get a working copy)
+@@ -117,7 +117,7 @@
+   date:        Mon Jan 01 00:00:12 2007 +0000
+   summary:     add gamma
+   
+-  $ hg log -r default/master
++  $ hg log -r default/master | grep -v 'master@default'
+   changeset:   3:1436150b86c2
+   tag:         default/master
+   tag:         tip

limit-push-scope.diff

+# HG changeset patch
+# Parent 53041c4177c012d01767f832e483f800bb722568
+WIP: push: only update bookmarks already on remote unless -B specified
+
+diff -r 53041c4177c0 -r d721c486cd43 hggit/__init__.py
+--- a/hggit/__init__.py	Fri Sep 28 21:48:24 2012 -0400
++++ b/hggit/__init__.py	Sun Sep 30 12:03:59 2012 -0400
+@@ -97,6 +97,13 @@
+ if getattr(hg, 'addbranchrevs', False):
+     extensions.wrapfunction(hg, 'addbranchrevs', safebranchrevs)
+ 
++def _push_with_bookmark_passthrough(orig, ui, repo, *args, **opts):
++    repo._push_bookmarks = opts.get('bookmark')
++    return orig(ui, repo, *args, **opts)
++
++def uisetup(ui):
++    extensions.wrapcommand(commands.table, 'push', _push_with_bookmark_passthrough)
++
+ def extsetup():
+     templatekw.keywords.update({'gitnode': gitnodekw})
+     revset.symbols.update({
+diff -r 53041c4177c0 -r d721c486cd43 hggit/git_handler.py
+--- a/hggit/git_handler.py	Fri Sep 28 21:48:24 2012 -0400
++++ b/hggit/git_handler.py	Sun Sep 30 12:03:59 2012 -0400
+@@ -241,6 +241,8 @@
+             raise hgutil.Abort(_("git remote error: ") + str(e))
+ 
+     def push(self, remote, revs, force):
++        print "passed in bookmarks:"
++        print self.repo._push_bookmarks
+         self.export_commits()
+         old_refs, new_refs = self.upload_pack(remote, revs, force)
+         remote_name = self.remote_name(remote)
+@@ -833,13 +835,22 @@
+     ## PACK UPLOADING AND FETCHING
+ 
+     def upload_pack(self, remote, revs, force):
++        print "upload packs revs in:"
++        print revs
+         client, path = self.get_transport_and_path(remote)
+         old_refs = {}
+         def changed(refs):
++            print "upload packs refs in:"
++            print refs
+             old_refs.update(refs)
+             to_push = revs or set(self.local_heads().values() + self.tags.values())
++            print "local_heads:"
++            print self.local_heads()
++            print "tags"
++            print self.tags
++            print "to_push:"
++            print to_push
+             return self.get_changed_refs(refs, to_push, force)
+-
+         genpack = self.git.object_store.generate_pack_contents
+         try:
+             self.ui.status(_("searching for changes\n"))
+@@ -850,6 +861,7 @@
+             raise hgutil.Abort(_("git remote error: ") + str(e))
+ 
+     def get_changed_refs(self, refs, revs, force):
++        print "entering get_changed_refs"
+         new_refs = refs.copy()
+ 
+         #The remote repo is empty and the local one doesn't have bookmarks/tags
+@@ -927,6 +939,8 @@
+                 else:
+                     raise hgutil.Abort("%s changed on the server, please pull "
+                                        "and merge before pushing" % ref)
++        print "new_refs:"
++        print new_refs
+ 
+         return new_refs
+ 
+diff -r 53041c4177c0 -r d721c486cd43 tests/test-bookmark-workflow.t
+--- a/tests/test-bookmark-workflow.t	Fri Sep 28 21:48:24 2012 -0400
++++ b/tests/test-bookmark-workflow.t	Sun Sep 30 12:03:59 2012 -0400
+@@ -179,3 +179,81 @@
+   searching for changed bookmarks
+      b2                        3442585be8a6
+   $ cd ..
++
++Calling default push updates the shared bookmark, but doesn't share new
++bookmarks
++  $ cd purehglocalrepo
++  $ hg push
++  pushing to $TESTTMP/hgremoterepo
++  searching for changes
++  no changes found
++  updating bookmark b1
++  [1]
++  $ hgstate -R ../hgremoterepo
++    3 fc2664cac217 "add delta" bookmarks: [master]
++    2 d85ced7ae9d6 "add gamma" bookmarks: [b1]
++    1 7bcd915dc873 "add beta" bookmarks: []
++    0 3442585be8a6 "add alpha" bookmarks: []
++  $ cd ..
++  $ cd hggitlocalrepo
++  $ hg push
++  pushing to $TESTTMP/gitremoterepo
++  searching for changes
++  no changes found
++  updating bookmark b1
++  [1]
++  $ cd ../gitremoterepo
++  $ gitstate
++    55b133e "add delta" refs: (master)
++    d338971 "add gamma" refs: (b1)
++    9497a4e "add beta" refs:
++    7eeab2e "add alpha" refs:
++  $ cd ..
++
++  $ cd purehglocalrepo
++  $ hg update master -q
++  $ echo delta2 >> delta
++  $ hg commit -m "append delta2"
++  $ hgstate
++    4 9a3af9d5e48d "append delta2" bookmarks: [master]
++    3 fc2664cac217 "add delta" bookmarks: []
++    2 d85ced7ae9d6 "add gamma" bookmarks: [b1]
++    1 7bcd915dc873 "add beta" bookmarks: []
++    0 3442585be8a6 "add alpha" bookmarks: [b2]
++  $ hg outgoing --template "{rev}:{node|short} {bookmarks} {tags} \"{desc}\"\n"
++  comparing with $TESTTMP/hgremoterepo
++  searching for changes
++  4:9a3af9d5e48d master tip "append delta2"
++  $ hg push
++  pushing to $TESTTMP/hgremoterepo
++  searching for changes
++  adding changesets
++  adding manifests
++  adding file changes
++  added 1 changesets with 1 changes to 1 files
++  updating bookmark master
++  $ hgstate -R ../hgremoterepo
++  $ cd ..
++  $ cd hggitlocalrepo
++  $ hg update master -q
++  $ echo delta2 >> delta
++  $ hg commit -m "append delta2"
++  $ hgstate
++    4 9a3af9d5e48d "append delta2" bookmarks: [master]
++    3 fc2664cac217 "add delta" bookmarks: []
++    2 d85ced7ae9d6 "add gamma" bookmarks: [b1]
++    1 7bcd915dc873 "add beta" bookmarks: []
++    0 3442585be8a6 "add alpha" bookmarks: [b2]
++  $ hg outgoing --template "{rev}:{node|short} {bookmarks} {tags} \"{desc}\"\n"
++  comparing with $TESTTMP/gitremoterepo
++  exporting hg objects to git
++  searching for changes
++  4:9a3af9d5e48d master tip "append delta2"
++  $ hg push
++  pushing to $TESTTMP/gitremoterepo
++  searching for changes
++  abort: git remote error: refs/heads/master failed to update
++  [255]
++  $ cd ../gitremoterepo
++  $ gitstate
++  $ cd ..

optimize_get_git_author

-# HG changeset patch
-# User Gregory Szorc <gregory.szorc@gmail.com>
-# Date 1348280926 25200
-# Node ID 5ca256907196d908a23dc72bf3230e975565d6e8
-# Parent  e152bdf5998098e135d15affd2a98c357d323b3f
-Optimize get_git_author
-
-Pre-compile regular expression. Prevent extra key lookup in author_map.
-
-diff --git a/hggit/git_handler.py b/hggit/git_handler.py
---- a/hggit/git_handler.py
-+++ b/hggit/git_handler.py
-@@ -24,16 +24,18 @@
- from mercurial.node import hex, bin, nullid
- from mercurial import context, util as hgutil
- from mercurial import error
- 
- import _ssh
- import util
- from overlay import overlayrepo
- 
-+RE_GIT_AUTHOR = re.compile('^(.*?) ?\<(.*?)(?:\>(.*))?$')
-+
- class GitProgress(object):
-     """convert git server progress strings into mercurial progress"""
-     def __init__(self, ui):
-         self.ui = ui
- 
-         self.lasttopic = None
-         self.msgbuf = ''
- 
-@@ -428,22 +430,20 @@
-         """
-         return re.sub('[<>\n]', '?', name.lstrip('< ').rstrip('> '))
- 
-     def get_git_author(self, ctx):
-         # hg authors might not have emails
-         author = ctx.user()
- 
-         # see if a translation exists
--        if author in self.author_map:
--            author = self.author_map[author]
-+        author = self.author_map.get(author, author)
- 
-         # check for git author pattern compliance
--        regex = re.compile('^(.*?) ?\<(.*?)(?:\>(.*))?$')
--        a = regex.match(author)
-+        a = RE_GIT_AUTHOR.match(author)
- 
-         if a:
-             name = self.get_valid_git_username_email(a.group(1))
-             email = self.get_valid_git_username_email(a.group(2))
-             if a.group(3) != None and len(a.group(3)) != 0:
-                 name += ' ext:(' + urllib.quote(a.group(3)) + ')'
-             author = self.get_valid_git_username_email(name) + ' <' + self.get_valid_git_username_email(email) + '>'
-         elif '@' in author:
-
--- 
-You received this message because you are subscribed to the Google Groups "hg-git" group.
-To post to this group, send email to hg-git@googlegroups.com.
-To unsubscribe from this group, send email to hg-git+unsubscribe@googlegroups.com.
-For more options, visit this group at http://groups.google.com/group/hg-git?hl=en.
-

populate-gitrepo-localrepo.diff

+# HG changeset patch
+# Parent 3f4c9921466a4f312a0f0583d530e1dca611c77a
+peer: pass localrepo to new gitrepo instances
+
+This change wraps hg.peer to allow for capturing the repo object.  It is then
+passed in to new gitrepo instanceds.  This will be needed to implement later
+functionality, such as richer bookmark support using pushkeys.
+
+diff -r 3f4c9921466a -r 8b1b1c8f9781 hggit/__init__.py
+--- a/hggit/__init__.py	Fri Sep 28 19:15:14 2012 -0400
++++ b/hggit/__init__.py	Fri Sep 28 19:23:42 2012 -0400
+@@ -184,6 +184,14 @@
+     # 1.7+
+     pass
+ 
++def peer(orig, uiorrepo, *args, **opts):
++    newpeer = orig(uiorrepo, *args, **opts)
++    if isinstance(newpeer, gitrepo.gitrepo):
++        if isinstance(uiorrepo, localrepo.localrepository):
++            newpeer.localrepo = uiorrepo
++    return newpeer
++extensions.wrapfunction(hg, 'peer', peer)
++
+ def revset_fromgit(repo, subset, x):
+     '''``fromgit()``
+     Select changesets that originate from Git.
+diff -r 3f4c9921466a -r 8b1b1c8f9781 hggit/gitrepo.py
+--- a/hggit/gitrepo.py	Fri Sep 28 19:15:14 2012 -0400
++++ b/hggit/gitrepo.py	Fri Sep 28 19:23:42 2012 -0400
+@@ -22,6 +22,7 @@
+             raise util.Abort('Cannot create a git repository.')
+         self.ui = ui
+         self.path = path
++        self.localrepo = None
+ 
+     def url(self):
+         return self.path

precompile_author_file_regular_expression

-# HG changeset patch
-# User Gregory Szorc <gregory.szorc@gmail.com>
-# Date 1348281830 25200
-# Node ID 95b937230a1352d738c81bbe1e3b3a031e071956
-# Parent  df4f8b7f800ff2a4c8a0c8e30575f38d5ea45fcb
-Precompile author file regular expression
-
-diff --git a/hggit/git_handler.py b/hggit/git_handler.py
---- a/hggit/git_handler.py
-+++ b/hggit/git_handler.py
-@@ -40,16 +40,18 @@
- # host and path with either a / or : (sepr)
- RE_GIT_URI = re.compile(
-     r'^(?P<scheme>git([+]ssh)?://)(?P<host>.*?)(:(?P<port>\d+))?'
-     r'(?P<sepr>[:/])(?P<path>.*)$')
- 
- RE_NEWLINES = re.compile('[\r\n]')
- RE_GIT_PROGRESS = re.compile('\((\d+)/(\d+)\)')
- 
-+RE_AUTHOR_FILE = re.compile('\s*=\s*')
-+
- class GitProgress(object):
-     """convert git server progress strings into mercurial progress"""
-     def __init__(self, ui):
-         self.ui = ui
- 
-         self.lasttopic = None
-         self.msgbuf = ''
- 
-@@ -120,17 +122,17 @@
-         if self.ui.config('git', 'authors'):
-             with open(self.repo.wjoin(
-                 self.ui.config('git', 'authors')
-             )) as f:
-                 for line in f:
-                     line = line.strip()
-                     if not line or line.startswith('#'):
-                         continue
--                    from_, to = re.split(r'\s*=\s*', line, 2)
-+                    from_, to = RE_AUTHOR_FILE.split(line, 2)
-                     self.author_map[from_] = to
- 
-     ## FILE LOAD AND SAVE METHODS
- 
-     def map_set(self, gitsha, hgsha):
-         self._map_git[gitsha] = hgsha
-         self._map_hg[hgsha] = gitsha
- 
-
--- 
-You received this message because you are subscribed to the Google Groups "hg-git" group.
-To post to this group, send email to hg-git@googlegroups.com.
-To unsubscribe from this group, send email to hg-git+unsubscribe@googlegroups.com.
-For more options, visit this group at http://groups.google.com/group/hg-git?hl=en.
-

precompile_git_author_extra_data_regular_expression

-# HG changeset patch
-# User Gregory Szorc <gregory.szorc@gmail.com>
-# Date 1348281593 25200
-# Node ID fbb9ade686ffdd66ed30a7e9b68d9246409f7389
-# Parent  1de6cd07221e0d5fb90b30e515891a325574a9fc
-Precompile Git author extra data regular expression
-
-diff --git a/hggit/git_handler.py b/hggit/git_handler.py
---- a/hggit/git_handler.py
-+++ b/hggit/git_handler.py
-@@ -28,16 +28,18 @@
- import _ssh
- import util
- from overlay import overlayrepo
- 
- RE_GIT_AUTHOR = re.compile('^(.*?) ?\<(.*?)(?:\>(.*))?$')
- 
- RE_GIT_SANITIZE_AUTHOR = re.compile('[<>\n]')
- 
-+RE_GIT_AUTHOR_EXTRA = re.compile('^(.*?)\ ext:\((.*)\) <(.*)\>$')
-+
- # Test for git:// and git+ssh:// URI.
- # Support several URL forms, including separating the
- # host and path with either a / or : (sepr)
- RE_GIT_URI = re.compile(
-     r'^(?P<scheme>git([+]ssh)?://)(?P<host>.*?)(:(?P<port>\d+))?'
-     r'(?P<sepr>[:/])(?P<path>.*)$')
- 
- class GitProgress(object):
-@@ -702,18 +704,17 @@
-         text = '\n'.join([l.rstrip() for l in text.splitlines()]).strip('\n')
-         if text + '\n' != origtext:
-             extra['message'] = create_delta(text +'\n', origtext)
- 
-         author = commit.author
- 
-         # convert extra data back to the end
-         if ' ext:' in commit.author:
--            regex = re.compile('^(.*?)\ ext:\((.*)\) <(.*)\>$')
--            m = regex.match(commit.author)
-+            m = RE_GIT_AUTHOR_EXTRA.match(commit.author)
-             if m:
-                 name = m.group(1)
-                 ex = urllib.unquote(m.group(2))
-                 email = m.group(3)
-                 author = name + ' <' + email + '>' + ex
- 
-         if ' <none@none>' in commit.author:
-             author = commit.author[:-12]
-
--- 
-You received this message because you are subscribed to the Google Groups "hg-git" group.
-To post to this group, send email to hg-git@googlegroups.com.
-To unsubscribe from this group, send email to hg-git+unsubscribe@googlegroups.com.
-For more options, visit this group at http://groups.google.com/group/hg-git?hl=en.
-

precompile_git_progress_regular_expressions

-# HG changeset patch
-# User Gregory Szorc <gregory.szorc@gmail.com>
-# Date 1348281744 25200
-# Node ID df4f8b7f800ff2a4c8a0c8e30575f38d5ea45fcb
-# Parent  fbb9ade686ffdd66ed30a7e9b68d9246409f7389
-Precompile Git progress regular expressions
-
-diff --git a/hggit/git_handler.py b/hggit/git_handler.py
---- a/hggit/git_handler.py
-+++ b/hggit/git_handler.py
-@@ -37,39 +37,42 @@
- 
- # Test for git:// and git+ssh:// URI.
- # Support several URL forms, including separating the
- # host and path with either a / or : (sepr)
- RE_GIT_URI = re.compile(
-     r'^(?P<scheme>git([+]ssh)?://)(?P<host>.*?)(:(?P<port>\d+))?'
-     r'(?P<sepr>[:/])(?P<path>.*)$')
- 
-+RE_NEWLINES = re.compile('[\r\n]')
-+RE_GIT_PROGRESS = re.compile('\((\d+)/(\d+)\)')
-+
- class GitProgress(object):
-     """convert git server progress strings into mercurial progress"""
-     def __init__(self, ui):
-         self.ui = ui
- 
-         self.lasttopic = None
-         self.msgbuf = ''
- 
-     def progress(self, msg):
-         # 'Counting objects: 33640, done.\n'
-         # 'Compressing objects:   0% (1/9955)   \r
--        msgs = re.split('[\r\n]', self.msgbuf + msg)
-+        msgs = RE_NEWLINES.split(self.msgbuf + msg)
-         self.msgbuf = msgs.pop()
- 
-         for msg in msgs:
-             td = msg.split(':', 1)
-             data = td.pop()
-             if not td:
-                 self.flush(data)
-                 continue
-             topic = td[0]
- 
--            m = re.search('\((\d+)/(\d+)\)', data)
-+            m = RE_GIT_PROGRESS.search(data)
-             if m:
-                 if self.lasttopic and self.lasttopic != topic:
-                     self.flush()
-                 self.lasttopic = topic
- 
-                 pos, total = map(int, m.group(1, 2))
-                 util.progress(self.ui, topic, pos, total=total)
-             else:
-
--- 
-You received this message because you are subscribed to the Google Groups "hg-git" group.
-To post to this group, send email to hg-git@googlegroups.com.
-To unsubscribe from this group, send email to hg-git+unsubscribe@googlegroups.com.
-For more options, visit this group at http://groups.google.com/group/hg-git?hl=en.
-

precompile_git_uri_regular_expression

-# HG changeset patch
-# User Gregory Szorc <gregory.szorc@gmail.com>
-# Date 1348281136 25200
-# Node ID 58a14700666b1eb51d13bee03ce411da149104a7
-# Parent  5ca256907196d908a23dc72bf3230e975565d6e8
-Precompile Git URI regular expression
-
-diff --git a/hggit/git_handler.py b/hggit/git_handler.py
---- a/hggit/git_handler.py
-+++ b/hggit/git_handler.py
-@@ -26,16 +26,23 @@
- from mercurial import error
- 
- import _ssh
- import util
- from overlay import overlayrepo
- 
- RE_GIT_AUTHOR = re.compile('^(.*?) ?\<(.*?)(?:\>(.*))?$')
- 
-+# Test for git:// and git+ssh:// URI.
-+# Support several URL forms, including separating the
-+# host and path with either a / or : (sepr)
-+RE_GIT_URI = re.compile(
-+    r'^(?P<scheme>git([+]ssh)?://)(?P<host>.*?)(:(?P<port>\d+))?'
-+    r'(?P<sepr>[:/])(?P<path>.*)$')
-+
- class GitProgress(object):
-     """convert git server progress strings into mercurial progress"""
-     def __init__(self, ui):
-         self.ui = ui
- 
-         self.lasttopic = None
-         self.msgbuf = ''
- 
-@@ -1288,24 +1295,17 @@
-         except UnicodeDecodeError:
-             return string.decode('ascii', 'replace').encode('utf-8')
- 
-     def get_transport_and_path(self, uri):
-         # pass hg's ui.ssh config to dulwich
-         if not issubclass(client.get_ssh_vendor, _ssh.SSHVendor):
-             client.get_ssh_vendor = _ssh.generate_ssh_vendor(self.ui)
- 
--        # Test for git:// and git+ssh:// URI.
--        #  Support several URL forms, including separating the
--        #  host and path with either a / or : (sepr)
--        git_pattern = re.compile(
--            r'^(?P<scheme>git([+]ssh)?://)(?P<host>.*?)(:(?P<port>\d+))?'
--            r'(?P<sepr>[:/])(?P<path>.*)$'
--        )
--        git_match = git_pattern.match(uri)
-+        git_match = RE_GIT_URI.match(uri)
-         if git_match:
-             res = git_match.groupdict()
-             transport = client.SSHGitClient if 'ssh' in res['scheme'] else client.TCPGitClient
-             host, port, sepr, path = res['host'], res['port'], res['sepr'], res['path']
-             if sepr == '/':
-                 path = '/' + path
-             # strip trailing slash for heroku-style URLs
-             # ssh+git://git@heroku.com:project.git/
-
--- 
-You received this message because you are subscribed to the Google Groups "hg-git" group.
-To post to this group, send email to hg-git@googlegroups.com.
-To unsubscribe from this group, send email to hg-git+unsubscribe@googlegroups.com.
-For more options, visit this group at http://groups.google.com/group/hg-git?hl=en.
-

precompile_git_username_sanitizing_regular_expression

-# HG changeset patch
-# User Gregory Szorc <gregory.szorc@gmail.com>
-# Date 1348281417 25200
-# Node ID 1de6cd07221e0d5fb90b30e515891a325574a9fc
-# Parent  58a14700666b1eb51d13bee03ce411da149104a7
-Precompile Git username sanitizing regular expression
-
-diff --git a/hggit/git_handler.py b/hggit/git_handler.py
---- a/hggit/git_handler.py
-+++ b/hggit/git_handler.py
-@@ -26,16 +26,18 @@
- from mercurial import error
- 
- import _ssh
- import util
- from overlay import overlayrepo
- 
- RE_GIT_AUTHOR = re.compile('^(.*?) ?\<(.*?)(?:\>(.*))?$')
- 
-+RE_GIT_SANITIZE_AUTHOR = re.compile('[<>\n]')
-+
- # Test for git:// and git+ssh:// URI.
- # Support several URL forms, including separating the
- # host and path with either a / or : (sepr)
- RE_GIT_URI = re.compile(
-     r'^(?P<scheme>git([+]ssh)?://)(?P<host>.*?)(:(?P<port>\d+))?'
-     r'(?P<sepr>[:/])(?P<path>.*)$')
- 
- class GitProgress(object):
-@@ -430,17 +432,17 @@
-         'john@doe.com'
-         >>> g(' <john@doe.com> ')
-         'john@doe.com'
-         >>> g('    <random<\n<garbage\n>  > > ')
-         'random???garbage?'
-         >>> g('Typo in hgrc >but.hg-git@handles.it.gracefully>')
-         'Typo in hgrc ?but.hg-git@handles.it.gracefully'
-         """
--        return re.sub('[<>\n]', '?', name.lstrip('< ').rstrip('> '))
-+        return RE_GIT_SANITIZE_AUTHOR.sub('?', name.lstrip('< ').rstrip('> '))
- 
-     def get_git_author(self, ctx):
-         # hg authors might not have emails
-         author = ctx.user()
- 
-         # see if a translation exists
-         author = self.author_map.get(author, author)
- 
-
--- 
-You received this message because you are subscribed to the Google Groups "hg-git" group.
-To post to this group, send email to hg-git@googlegroups.com.
-To unsubscribe from this group, send email to hg-git+unsubscribe@googlegroups.com.
-For more options, visit this group at http://groups.google.com/group/hg-git?hl=en.
-
-fix-outgoing.diff
-buglink.diff
-testedwith.diff
+fix-test-subrepos.diff
 test-bookmark-workflow-clone.diff
 test-no-changes-outgoing.diff
 fix-no-changes-push.diff
-fix-no-changes-outgoing-b.diff
-gitrepo-bookmark-support.diff
+test-workflow-push-no-changes.diff
+populate-gitrepo-localrepo.diff
+gitrepo-support-listkeys.diff
+test-changes-bookmarks-outgoing.diff
+fix-push-output.diff
+limit-push-scope.diff
+test-default-push.diff
 test-bookmark-workflow.diff
 test-export
-optimize_get_git_author
-precompile_git_uri_regular_expression
-precompile_git_username_sanitizing_regular_expression
-precompile_git_author_extra_data_regular_expression
-precompile_git_progress_regular_expressions
-precompile_author_file_regular_expression
-verify_tree_and_parent_objects_are_in_git_repo
 make_get_valid_git_username_email_static
 implement_treetracker_for_incremental_tree_calculation
 test-git-branch-loss.diff

test-bookmark-workflow-clone.diff

 # HG changeset patch
-# Parent 3b82cf6ac73ad8455a632516735070610eb5cd32
+# Parent 87731d792e3adf79e45cae30979a29b6ab2ac3a4
 tests: add coverage for bookmark workflow comparison; cloning
 
-diff -r 3b82cf6ac73a -r b7c14f2af6d1 tests/test-bookmark-workflow.t
+diff -r 87731d792e3a tests/test-bookmark-workflow.t
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/tests/test-bookmark-workflow.t	Wed Sep 26 23:06:58 2012 -0400
-@@ -0,0 +1,96 @@
++++ b/tests/test-bookmark-workflow.t	Fri Sep 28 19:50:36 2012 -0400
+@@ -0,0 +1,99 @@
 +This test demonstrates how Hg works with remote Hg bookmarks compared with
 +remote branches via Hg-Git.  Ideally, they would behave identically.  In
 +practice, some differences are unavoidable, but we should try to minimize
 +of bookmarks should be considered "under test", and mutation of bookmarks
 +locally is only to provide a test fixture.
 +
-+bail if the user does not have dulwich
++# Fails for some reason, need to investigate
++#   $ "$TESTDIR/hghave" git || exit 80
++
++Bail if the user does not have dulwich
 +  $ python -c 'import dulwich, dulwich.repo' || exit 80
 +
 +  $ echo "[extensions]" >> $HGRCPATH

test-changes-bookmarks-outgoing.diff

+# HG changeset patch
+# Parent e0344f1832507ec67f8024c256fa722e1c0a9c3b
+tests: add coverage for outgoing with bookmark changes only
+
+diff -r e0344f183250 -r abdff9438c66 tests/test-bookmark-workflow.t
+--- a/tests/test-bookmark-workflow.t	Fri Sep 28 20:45:58 2012 -0400
++++ b/tests/test-bookmark-workflow.t	Fri Sep 28 20:51:13 2012 -0400
+@@ -137,3 +137,45 @@
+   no changes found
+   [1]
+   $ cd ..
++
++Changed bookmarks, but not revs
++  $ cd purehglocalrepo
++  $ hg bookmark -fr 2 b1
++  $ hg bookmark -r 0 b2
++  $ hgstate
++    3 fc2664cac217 "add delta" bookmarks: [master]
++    2 d85ced7ae9d6 "add gamma" bookmarks: [b1]
++    1 7bcd915dc873 "add beta" bookmarks: []
++    0 3442585be8a6 "add alpha" bookmarks: [b2]
++  $ hg outgoing
++  comparing with $TESTTMP/hgremoterepo
++  searching for changes
++  no changes found
++  [1]
++As of 2.3, Mercurial's outgoing -B doesn't actually show changed bookmarks
++It only shows "new" bookmarks.  Thus, b1 doesn't show up.
++  $ hg outgoing -B
++  comparing with $TESTTMP/hgremoterepo
++  searching for changed bookmarks
++     b2                        3442585be8a6
++  $ cd ..
++  $ cd hggitlocalrepo
++  $ hg bookmark -fr 2 b1
++  $ hg bookmark -r 0 b2
++  $ hgstate
++    3 fc2664cac217 "add delta" bookmarks: [master]
++    2 d85ced7ae9d6 "add gamma" bookmarks: [b1]
++    1 7bcd915dc873 "add beta" bookmarks: []
++    0 3442585be8a6 "add alpha" bookmarks: [b2]
++  $ hg outgoing
++  comparing with $TESTTMP/gitremoterepo
++  searching for changes
++  no changes found
++  [1]
++As of 2.3, Mercurial's outgoing -B doesn't actually show changed bookmarks
++It only shows "new" bookmarks.  Thus, b1 doesn't show up.
++  $ hg outgoing -B
++  comparing with $TESTTMP/gitremoterepo
++  searching for changed bookmarks
++     b2                        3442585be8a6
++  $ cd ..

test-default-push.diff

+# HG changeset patch
+# Parent 631c4c3b2fa099c8a0571740459250006d3aad93
+WIP tests: add coverage for default push with bookmark support
+
+diff -r 631c4c3b2fa0 tests/test-bookmark-workflow.t
+--- a/tests/test-bookmark-workflow.t	Fri Sep 28 21:00:49 2012 -0400
++++ b/tests/test-bookmark-workflow.t	Fri Sep 28 21:01:22 2012 -0400
+@@ -179,3 +179,32 @@
+   searching for changed bookmarks
+      b2                        3442585be8a6
+   $ cd ..
++
++Calling default push updates the shared bookmark, but doesn't share new
++bookmarks
++  $ cd purehglocalrepo
++  $ hg push
++  pushing to $TESTTMP/hgremoterepo
++  searching for changes
++  no changes found
++  updating bookmark b1
++  [1]
++  $ hgstate -R ../hgremoterepo
++    3 fc2664cac217 "add delta" bookmarks: [master]
++    2 d85ced7ae9d6 "add gamma" bookmarks: [b1]
++    1 7bcd915dc873 "add beta" bookmarks: []
++    0 3442585be8a6 "add alpha" bookmarks: []
++  $ cd ..
++  $ cd hggitlocalrepo
++  $ hg push
++  pushing to $TESTTMP/gitremoterepo
++  searching for changes
++      default::refs/heads/b2 => GIT:7eeab2ea
++      default::refs/heads/b1 => GIT:d338971a
++  $ cd ../gitremoterepo
++  $ gitstate
++    55b133e "add delta" refs: (master)
++    d338971 "add gamma" refs: (b1)
++    9497a4e "add beta" refs:
++    7eeab2e "add alpha" refs: (b2)
++  $ cd ..

test-workflow-push-no-changes.diff

+# HG changeset patch
+# Parent 4afee709715a8f3dea00f182a67bc8c36c9db5cc
+tests: add workflow coverage for push with no changes
+
+test-bookmark-workflow.t now skips all Mercurial versions below 2.1, as the
+return code is different, and it's more important for this test to accurately
+show that we match the behavior of current Mercurial than that all versions
+behave the same.
+
+diff -r 4afee709715a -r 39bf32916db1 tests/test-bookmark-workflow.t
+--- a/tests/test-bookmark-workflow.t	Fri Sep 28 20:59:34 2012 -0400
++++ b/tests/test-bookmark-workflow.t	Fri Sep 28 21:00:37 2012 -0400
+@@ -15,6 +15,10 @@
+ Bail if the user does not have dulwich
+   $ python -c 'import dulwich, dulwich.repo' || exit 80
+ 
++Skip if Mercurial < 2.1; workflow was different before that
++  $ python -c 'from mercurial import util ; assert \
++  >  util.version() != "unknown" and util.version() >= "2.1"' || exit 80
++
+   $ echo "[extensions]" >> $HGRCPATH
+   $ echo "hggit=$(echo $(dirname $TESTDIR))/hggit" >> $HGRCPATH
+ 
+@@ -105,6 +109,11 @@
+   searching for changes
+   no changes found
+   [1]
++  $ hg push
++  pushing to $TESTTMP/hgremoterepo
++  searching for changes
++  no changes found
++  [1]
+   $ cd ..
+   $ cd hggitlocalrepo
+   $ hg outgoing
+@@ -112,4 +121,9 @@
+   searching for changes
+   no changes found
+   [1]
++  $ hg push
++  pushing to $TESTTMP/gitremoterepo
++  searching for changes
++  no changes found
++  [1]
+   $ cd ..

testedwith.diff

-# HG changeset patch
-# Parent 2f7be60fe85bf8d30c0206b547c2bfbf5b7a96ff
-docs: include testedwith
-
-Mercurial has support for including information about the tested versions of
-Mercurial for an extension when it detects that an extension has broken.  This
-change includes the appropriate attribute in the extension.
-
-diff -r 2f7be60fe85b -r 8df60de1c4e2 hggit/__init__.py
---- a/hggit/__init__.py	Thu Sep 27 18:21:04 2012 -0400
-+++ b/hggit/__init__.py	Thu Sep 27 18:22:58 2012 -0400
-@@ -42,6 +42,7 @@
- import gitrepo, hgrepo
- from git_handler import GitHandler
- 
-+testedwith = '1.9.3 2.0.2 2.1.2 2.2.3 2.3.1'
- buglink = 'https://bitbucket.org/durin42/hg-git/issues'
- 
- # support for `hg clone git://github.com/defunkt/facebox.git`

verify_tree_and_parent_objects_are_in_git_repo

-# HG changeset patch
-# User Gregory Szorc <gregory.szorc@gmail.com>
-# Date 1348284386 25200
-# Node ID 2db03c124dde9c84de1006526f497d867094a231
-# Parent  95b937230a1352d738c81bbe1e3b3a031e071956
-Verify tree and parent objects are in Git repo
-
-When exporting Git commits, verify that the tree and parents objects
-exist in the repository before allowing the commit to be exported. If a
-tree or parent commit is missing, then the repository is not valid and
-the export should not be allowed.
-
-diff --git a/hggit/git_handler.py b/hggit/git_handler.py
---- a/hggit/git_handler.py
-+++ b/hggit/git_handler.py
-@@ -379,24 +379,32 @@
-             commit.commit_time = commit.author_time
-             commit.commit_timezone = commit.author_timezone
- 
-         commit.parents = []
-         for parent in self.get_git_parents(ctx):
-             hgsha = hex(parent.node())
-             git_sha = self.map_git_get(hgsha)
-             if git_sha:
-+                if git_sha not in self.git.object_store:
-+                    raise hgutil.Abort(_('Parent SHA-1 not present in Git'
-+                                         'repo: %s' % git_sha))
-+
-                 commit.parents.append(git_sha)
- 
-         commit.message = self.get_git_message(ctx)
- 
-         if 'encoding' in extra:
-             commit.encoding = extra['encoding']
- 
-         tree_sha = commit_tree(self.git.object_store, self.iterblobs(ctx))
-+        if tree_sha not in self.git.object_store:
-+            raise hgutil.Abort(_('Tree SHA-1 not present in Git repo: %s' %
-+                tree_sha))
-+
-         commit.tree = tree_sha
- 
-         self.git.object_store.add_object(commit)
-         self.map_set(commit.id, ctx.hex())
- 
-         self.swap_out_encoding(oldenc)
-         return commit.id
- 
-
--- 
-You received this message because you are subscribed to the Google Groups "hg-git" group.
-To post to this group, send email to hg-git@googlegroups.com.
-To unsubscribe from this group, send email to hg-git+unsubscribe@googlegroups.com.
-For more options, visit this group at http://groups.google.com/group/hg-git?hl=en.
-
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.