threads / patch / 34666

v2, 2 partsremote-hg: shared repo upgrade fix

Subject: [PATCH v2 0/2] remote-hg: shared repo upgrade fix

## tl;dr

4 messages between Aug 9, 2013 and Aug 10, 2013. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Felipe Contreras· Aug 9, 2013, 22:38 UTC · lore
Hi,

Same as before, except with commit messages updated, and improved the second patch:

Show changes to contrib/remote-helpers/git-remote-hg +3 −2
--- a/contrib/remote-helpers/git-remote-hg
+++ b/contrib/remote-helpers/git-remote-hg
@@ -400,8 +400,9 @@ def get_repo(url, alias):
                 local_hg = os.path.join(shared_path, x, 'clone', '.hg')
                 if not os.path.exists(local_hg):
                     continue
-                shutil.copytree(local_hg, hg_path)
-                break
+                if not os.path.exists(hg_path):
+                    shutil.move(local_hg, hg_path)
+                shutil.rmtree(os.path.join(shared_path, x, 'clone'))
 
         # setup shared repo (if not there)
         try:

Felipe Contreras (2):
  remote-hg: ensure shared repo is initialized
  remote-hg: add shared repo upgrade

 contrib/remote-helpers/git-remote-hg | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)
-- 
1.8.3.267.gbb4989f
Felipe Contreras· Aug 9, 2013, 22:38 UTC · re: Felipe Contreras · lore

[PATCH v2 1/2] remote-hg: ensure shared repo is initialized

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.

So, instead of simply checking if the directory exists, let's always try to create an empty shared repository to ensure it's there. This works because we don't need the initial clone, if the repository is shared, pulling from the child updates the parent's storage; it's exactly the same as cloning, so we can simplify the shared repo setup this way while at the same time fixing the problem.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/remote-helpers/git-remote-hg | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
Show changes to contrib/remote-helpers/git-remote-hg +6 −5
diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg
index 0194c67..cfd4f53 100755
--- a/contrib/remote-helpers/git-remote-hg
+++ b/contrib/remote-helpers/git-remote-hg
@@ -391,11 +391,12 @@ 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')
+
+        # 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.8.3.267.gbb4989f
Felipe Contreras· Aug 9, 2013, 22:38 UTC · re: Felipe Contreras · lore

[PATCH v2 2/2] remote-hg: add shared repo upgrade

If we have an old organization (v1.8.3), and want to upgrade to a newer one (v1.8.4), the user would have to fetch the whole repository, instead we can just move the repository, so the user would not notice any difference.

Also, remove other clones, so in time they get set up as shared.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/remote-helpers/git-remote-hg | 12 ++++++++++++
 1 file changed, 12 insertions(+)
Show changes to contrib/remote-helpers/git-remote-hg +12 −0
diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg
index cfd4f53..6c82b8d 100755
--- a/contrib/remote-helpers/git-remote-hg
+++ b/contrib/remote-helpers/git-remote-hg
@@ -392,6 +392,18 @@ def get_repo(url, alias):
     else:
         shared_path = os.path.join(gitdir, 'hg')
 
+        # 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
+                if not os.path.exists(hg_path):
+                    shutil.move(local_hg, hg_path)
+                shutil.rmtree(os.path.join(shared_path, x, 'clone'))
+
         # setup shared repo (if not there)
         try:
             hg.peer(myui, {}, shared_path, create=True)
-- 
1.8.3.267.gbb4989f
Antoine Pelisse· Aug 10, 2013, 15:18 UTC · re: Felipe Contreras · lore

Re: [PATCH v2 0/2] remote-hg: shared repo upgrade fix

On Sat, Aug 10, 2013 at 12:38 AM, Felipe Contreras <felipe.contreras@gmail.com> wrote:

Show 19 quoted lines
> Hi,
>
> Same as before, except with commit messages updated, and improved the second
> patch:
>
> --- a/contrib/remote-helpers/git-remote-hg
> +++ b/contrib/remote-helpers/git-remote-hg
> @@ -400,8 +400,9 @@ def get_repo(url, alias):
>                  local_hg = os.path.join(shared_path, x, 'clone', '.hg')
>                  if not os.path.exists(local_hg):
>                      continue
> -                shutil.copytree(local_hg, hg_path)
> -                break
> +                if not os.path.exists(hg_path):
> +                    shutil.move(local_hg, hg_path)
> +                shutil.rmtree(os.path.join(shared_path, x, 'clone'))
>
>          # setup shared repo (if not there)
>          try:
FWIW,
Reviewed-by: Antoine Pelisse <apelisse@gmail.com>
Cheers,

← back to recent threads