[PATCH] remote-hg: add shared repo upgrade

Subsystems: the rest

DORMANTno replies

3 messages, 2 authors, 2016-06-15 · open the first message on its own page

[PATCH] remote-hg: add shared repo upgrade

From: Antoine Pelisse <hidden>
Date: 2016-06-15 22:58:19

From: Felipe Contreras <redacted>

6796d49 (remote-hg: use a shared repository store) introduced a bug by
making the shared repository '.git/hg', which is already used before
that patch, so clones that happened before that patch, fail after that
patch, because there's no shared Mercurial repo.

It's trivial to upgrade to the new organization by copying the Mercurial
repo from one of the remotes (e.g. 'origin'), so let's do so.

Reported-by: Joern Hees <redacted>
Signed-off-by: Felipe Contreras <redacted>
---
 contrib/remote-helpers/git-remote-hg |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg
index 0194c67..02404dc 100755
--- a/contrib/remote-helpers/git-remote-hg
+++ b/contrib/remote-helpers/git-remote-hg
@@ -391,11 +391,22 @@ def get_repo(url, alias):
             os.makedirs(dirname)
     else:
         shared_path = os.path.join(gitdir, 'hg')
-        if not os.path.exists(shared_path):
-            try:
-                hg.clone(myui, {}, url, shared_path, update=False, pull=True)
-            except:
-                die('Repository error')
+
+        # check and upgrade old organization
+        hg_path = os.path.join(shared_path, '.hg')
+        if os.path.exists(shared_path) and not os.path.exists(hg_path):
+            repos = os.listdir(shared_path)
+            for x in repos:
+                local_hg = os.path.join(shared_path, x, 'clone', '.hg')
+                if not os.path.exists(local_hg):
+                    continue
+                shutil.copytree(local_hg, hg_path)
+
+        # setup shared repo (if not there)
+        try:
+            hg.peer(myui, {}, shared_path, create=True)
+        except error.RepoError:
+            pass
 
         if not os.path.exists(dirname):
             os.makedirs(dirname)
-- 
1.7.9.5

Re: [PATCH] remote-hg: add shared repo upgrade

From: Felipe Contreras <hidden>
Date: 2016-06-15 22:58:19

On Mon, Aug 5, 2013 at 2:22 PM, Antoine Pelisse [off-list ref] wrote:
From: Felipe Contreras <redacted>

6796d49 (remote-hg: use a shared repository store) introduced a bug by
making the shared repository '.git/hg', which is already used before
that patch, so clones that happened before that patch, fail after that
patch, because there's no shared Mercurial repo.

It's trivial to upgrade to the new organization by copying the Mercurial
repo from one of the remotes (e.g. 'origin'), so let's do so.
In addition to that, simplify the shared repo initialization; if the
repository is shared, the pull on the child will use the parent's
storage, so there's no need for the initial clone.

And make sure the shared repository is always present.

It seems pretty clear to me that we are talking about multiple patches here.

-- 
Felipe Contreras

Re: [PATCH] remote-hg: add shared repo upgrade

From: Antoine Pelisse <hidden>
Date: 2016-06-15 22:58:19

On Mon, Aug 5, 2013 at 9:31 PM, Felipe Contreras
[off-list ref] wrote:
On Mon, Aug 5, 2013 at 2:22 PM, Antoine Pelisse [off-list ref] wrote:
quoted
From: Felipe Contreras <redacted>

6796d49 (remote-hg: use a shared repository store) introduced a bug by
making the shared repository '.git/hg', which is already used before
that patch, so clones that happened before that patch, fail after that
patch, because there's no shared Mercurial repo.

It's trivial to upgrade to the new organization by copying the Mercurial
repo from one of the remotes (e.g. 'origin'), so let's do so.
In addition to that, simplify the shared repo initialization; if the
repository is shared, the pull on the child will use the parent's
storage, so there's no need for the initial clone.

And make sure the shared repository is always present.
It comes without saying that you can change this description if you want to :-)
It seems pretty clear to me that we are talking about multiple patches here.
I'm not sure that's necessary. But I may be missing something.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help