git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 17/47] remote-hg: use a shared repository store

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
May 14, 2013, 04:36 UTC
Message-ID
<1368506230-19614-18-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1368506230-19614-1-git-send-email-felipe.contreras@gmail.com>
This way we don't have to have duplicated Mercurial objects.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/remote-helpers/git-remote-hg | 35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg
index 60e875d..d676c98 100755
--- a/contrib/remote-helpers/git-remote-hg
+++ b/contrib/remote-helpers/git-remote-hg
@@ -343,21 +343,29 @@ def get_repo(url, alias):
 
     if hg.islocal(url):
         repo = hg.repository(myui, url)
+        if not os.path.exists(dirname):
+            os.makedirs(dirname)
     else:
-        local_path = os.path.join(dirname, 'clone')
-        if not os.path.exists(local_path):
+        shared_path = os.path.join(gitdir, 'hg')
+        if not os.path.exists(shared_path):
             try:
-                peer, dstpeer = hg.clone(myui, {}, url, local_path, update=True, pull=True)
+                hg.clone(myui, {}, url, shared_path, update=False, pull=True)
             except:
                 die('Repository error')
-            repo = dstpeer.local()
-        else:
-            repo = hg.repository(myui, local_path)
-            try:
-                peer = hg.peer(myui, {}, url)
-            except:
-                die('Repository error')
-            repo.pull(peer, heads=None, force=True)
+
+        if not os.path.exists(dirname):
+            os.mkdir(dirname)
+
+        local_path = os.path.join(dirname, 'clone')
+        if not os.path.exists(local_path):
+            hg.share(myui, shared_path, local_path, update=False)
+
+        repo = hg.repository(myui, local_path)
+        try:
+            peer = hg.peer(myui, {}, url)
+        except:
+            die('Repository error')
+        repo.pull(peer, heads=None, force=True)
 
         rb = peer.listkeys('bookmarks')
         bookmarks.updatefromremote(myui, repo, rb, url)
@@ -901,7 +909,7 @@ def fix_path(alias, repo, orig_url):
     subprocess.call(cmd)
 
 def main(args):
-    global prefix, dirname, branches, bmarks
+    global prefix, gitdir, dirname, branches, bmarks
     global marks, blob_marks, parsed_refs
     global peer, mode, bad_mail, bad_name
     global track_branches, force_push, is_tmp
@@ -947,9 +955,6 @@ def main(args):
     if not is_tmp:
         fix_path(alias, peer or repo, url)
 
-    if not os.path.exists(dirname):
-        os.makedirs(dirname)
-
     marks_path = os.path.join(dirname, 'marks-hg')
     marks = Marks(marks_path)
 
-- 
1.8.3.rc1.579.g184e698
Previous: Eric SunshineNext: Felipe Contreras
Message 19 of 50 in “remote-hg: fixes for next”
  1. 00/47 remote-hg: fixes for nextFelipe Contreras, May 14, 2013
  2. 01/47 remote-hg: trivial cleanupsFelipe Contreras, May 14, 2013
  3. 02/47 remote-hg: get rid of unused exception checksFelipe Contreras, May 14, 2013
  4. 03/47 remote-hg: enable track-branches in hg-git modeFelipe Contreras, May 14, 2013
  5. 04/47 remote-hg: add new get_config_bool() helperFelipe Contreras, May 14, 2013
  6. 05/47 remote-hg: fix new branch creationFelipe Contreras, May 14, 2013
  7. 06/47 remote-hg: disable forced push by defaultFelipe Contreras, May 14, 2013
  8. 07/47 remote-hg: don't push fake 'master' bookmarkFelipe Contreras, May 14, 2013
  9. 08/47 remote-hg: update bookmarks when pullingFelipe Contreras, May 14, 2013
  10. 09/47 remote-hg: test: be a little more quietFelipe Contreras, May 14, 2013
  11. 10/47 remote-hg: trivial reorganizationFelipe Contreras, May 14, 2013
  12. 11/47 remote-helpers: test: cleanup white-spacesFelipe Contreras, May 14, 2013
  13. 12/47 remote-helpers: test: cleanup styleFelipe Contreras, May 14, 2013
  14. 13/47 remote-helpers: tests: general improvementsFelipe Contreras, May 14, 2013
  15. 14/47 remote-helpers: test: simplify remote URLsFelipe Contreras, May 14, 2013
  16. 15/47 remote-hg: test: simplify previous branch checkoutFelipe Contreras, May 14, 2013
  17. 16/47 remote-hg: load all extensionsFelipe Contreras, May 14, 2013
  18. Eric SunshineMay 14, 2013
  19. 17/47 remote-hg: use a shared repository storeFelipe Contreras, May 14, 2013
  20. 18/47 remote-hg: shuffle some codeFelipe Contreras, May 14, 2013
  21. 19/47 remote-hg: improve node traversingFelipe Contreras, May 14, 2013
  22. 20/47 remote-hg: add version checks to the marksFelipe Contreras, May 14, 2013
  23. 21/47 remote-hg: switch from revisions to SHA-1 noteidsFelipe Contreras, May 14, 2013
  24. 22/47 remote-hg: upgrade version 1 marksFelipe Contreras, May 14, 2013
  25. 23/47 remote-hg: ensure remote rebasing worksFelipe Contreras, May 14, 2013
  26. 24/47 remote-hg: trivial cleanupsFelipe Contreras, May 14, 2013
  27. 25/47 remote-hg: improve progress calculationFelipe Contreras, May 14, 2013
  28. 26/47 remote-hg: always point HEAD to masterFelipe Contreras, May 14, 2013
  29. 27/47 remote-bzr: simplify test checksFelipe Contreras, May 14, 2013
  30. 28/47 remote-hg: add check_bookmark() test helperFelipe Contreras, May 14, 2013
  31. 29/47 remote-hg: add remote testsFelipe Contreras, May 14, 2013
  32. 30/47 remote-hg: add test to push new bookmarkFelipe Contreras, May 14, 2013
  33. 31/47 remote-hg: add test for diverged pushFelipe Contreras, May 14, 2013
  34. 32/47 remote-hg: add test for bookmark divergeFelipe Contreras, May 14, 2013
  35. 33/47 remote-hg: add test for new bookmark specialFelipe Contreras, May 14, 2013
  36. Eric SunshineMay 14, 2013
  37. 34/47 remote-hg: add test for big pushFelipe Contreras, May 14, 2013
  38. 35/47 remote-hg: add test for failed double pushFelipe Contreras, May 14, 2013
  39. 36/47 remote-hg: reorganize bookmark handlingFelipe Contreras, May 14, 2013
  40. 37/47 remote-hg: force remote bookmark push selectivelyFelipe Contreras, May 14, 2013
  41. 38/47 remote-hg: only update necessary revisionsFelipe Contreras, May 14, 2013
  42. 39/47 remote-hg: implement custom push()Felipe Contreras, May 14, 2013
  43. 40/47 remote-hg: implement custom checkheads()Felipe Contreras, May 14, 2013
  44. 41/47 remote-hg: pass around revision refsFelipe Contreras, May 14, 2013
  45. 42/47 remote-hg: check diverged bookmarksFelipe Contreras, May 14, 2013
  46. 43/47 remote-hg: simplify branch_tip()Felipe Contreras, May 14, 2013
  47. 44/47 remote-hg: improve branch listingFelipe Contreras, May 14, 2013
  48. 45/47 remote-hg: use remote 'default' not local oneFelipe Contreras, May 14, 2013
  49. 46/47 remote-hg: improve lightweight tag authorFelipe Contreras, May 14, 2013
  50. 47/47 remote-hg: remove files before modificationsFelipe Contreras, May 14, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.