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

Re: [PATCH v3] remotes-hg: bugfix for fetching non local remotes

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Jul 25, 2013, 19:12 UTC
Message-ID
<CAMP44s16bRx0p_F=PTcy9bekg_5TVC_GsQjzOev6xkpCEWcjAw@mail.gmail.com>
In-Reply-To
<1374712977-3215-1-git-send-email-dev@joernhees.de>
On Wed, Jul 24, 2013 at 7:42 PM, Joern Hees <dev@joernhees.de> wrote:
Show 32 quoted lines
> 6796d49 introduced a bug by making shared_path == ".git/hg' which
> will most likely exist already, causing a new remote never to be
> cloned and subsequently causing hg.share to fail with error msg:
> "mercurial.error.RepoError: repository .git/hg not found"
>
> Changing shared_path to ".git/hg/.shared" will solve this problem
> and create a shared local mercurial repository for non local remotes.
> The initial dot circumvents a name clash problem should a remote be
> called "shared".
>
> Signed-off-by: Joern Hees <dev@joernhees.de>
> Mentored-by: Antoine Pelisse <apelisse@gmail.com>
> Thanks-to: Junio C Hamano <gitster@pobox.com>
> ---
>  contrib/remote-helpers/git-remote-hg | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg
> index 0194c67..f4e9d1c 100755
> --- a/contrib/remote-helpers/git-remote-hg
> +++ b/contrib/remote-helpers/git-remote-hg
> @@ -390,7 +390,7 @@ def get_repo(url, alias):
>          if not os.path.exists(dirname):
>              os.makedirs(dirname)
>      else:
> -        shared_path = os.path.join(gitdir, 'hg')
> +        shared_path = os.path.join(gitdir, 'hg', '.shared')
>          if not os.path.exists(shared_path):
>              try:
>                  hg.clone(myui, {}, url, shared_path, update=False, pull=True)
> --
> 1.8.3.4

I don't like this approach because if it's a huge repository the user would have to clone again, not only if he was using v1.8.3, but also if he was using the latest and greatest (because you are changing the location again). It's relatively trivial to move from the old to the shared organization, so that's what I vote for. Besides, I don't see the point of having a '.shared/.hg' directory, and nothing else on that '.shared' folder.

So, here's my patch. If only Junio read them.
Subject: [PATCH] remote-hg: add shared repo upgrade

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 <dev@joernhees.de>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/remote-helpers/git-remote-hg.py | 7 +++++++
 1 file changed, 7 insertions(+)
diff --git a/contrib/remote-helpers/git-remote-hg.py
b/contrib/remote-helpers/git-remote-hg.py
index 0194c67..57a8ec4 100755
--- a/contrib/remote-helpers/git-remote-hg.py
+++ b/contrib/remote-helpers/git-remote-hg.py
@@ -396,6 +396,13 @@ def get_repo(url, alias):
                 hg.clone(myui, {}, url, shared_path, update=False, pull=True)
             except:
                 die('Repository error')
+        else:
+            # check and upgrade old organization
+            hg_path = os.path.join(shared_path, '.hg')
+            if not os.path.exists(hg_path):
+                repos = os.listdir(shared_path)
+                local_hg = os.path.join(shared_path, repos[0], 'clone', '.hg')
+                shutil.copytree(local_hg, hg_path)

         if not os.path.exists(dirname):
             os.makedirs(dirname)
-- 
1.8.3.3

-- 
Felipe Contreras
Previous: Joern HeesNext: Antoine Pelisse
Message 2 of 16 in “remotes-hg: bugfix for fetching non local remotes”
  1. remotes-hg: bugfix for fetching non local remotesJoern Hees, Jul 25, 2013
  2. Felipe ContrerasJul 25, 2013
  3. Antoine PelisseJul 25, 2013
  4. Felipe ContrerasJul 25, 2013
  5. Antoine PelisseJul 25, 2013
  6. Junio C HamanoJul 26, 2013
  7. Jörn HeesJul 26, 2013
  8. remote-hg: Fix cloning and sharing bugAntoine Pelisse, Aug 4, 2013
  9. Jörn HeesAug 4, 2013
  10. Felipe ContrerasAug 4, 2013
  11. Jörn HeesAug 4, 2013
  12. Felipe ContrerasAug 4, 2013
  13. Antoine PelisseAug 4, 2013
  14. Felipe ContrerasAug 4, 2013
  15. Felipe ContrerasAug 4, 2013
  16. Jörn HeesJul 26, 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.