threads / patch / 35394

patchremote-hg: fix hg sharedpath when git clone is moved

Subject: [PATCH] remote-hg: fix hg sharedpath when git clone is moved

## tl;dr

4 messages between Nov 23, 2013 and Nov 23, 2013. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Antoine Pelisse· Nov 23, 2013, 12:38 UTC · lore

remote-hg is using a mercurial shared clone to store all remotes objects in one place. Unfortunately, the sharedpath is stored as an absolute path by mercurial, creating a dependency on the location of the git repository. Whenever the git repository is moved, the sharedpath must be updated to reflect the new absolute path.

Check mercurial sharedpath file when getting the local hg repository, and update it manually with the new path if necessary.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
---
 contrib/remote-helpers/git-remote-hg |  4 ++++
 contrib/remote-helpers/test-hg.sh    | 11 +++++++++++
 2 files changed, 15 insertions(+)
Show changes to 2 files +15 −0

contrib/remote-helpers/git-remote-hg, contrib/remote-helpers/test-hg.sh

diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg
index c6026b9..576f094 100755
--- a/contrib/remote-helpers/git-remote-hg
+++ b/contrib/remote-helpers/git-remote-hg
@@ -416,6 +416,10 @@ def get_repo(url, alias):
         local_path = os.path.join(dirname, 'clone')
         if not os.path.exists(local_path):
             hg.share(myui, shared_path, local_path, update=False)
+        else:
+            sharedpath_file = os.path.join(local_path, '.hg', 'sharedpath')
+            if hg_path != open(sharedpath_file, 'r').read():
+                open(sharedpath_file, 'w').write(hg_path)
 
         repo = hg.repository(myui, local_path)
         try:
diff --git a/contrib/remote-helpers/test-hg.sh b/contrib/remote-helpers/test-hg.sh
index 72f745d..2477540 100755
--- a/contrib/remote-helpers/test-hg.sh
+++ b/contrib/remote-helpers/test-hg.sh
@@ -335,6 +335,17 @@ test_expect_success 'remote cloning' '
 	check gitrepo HEAD zero
 '
 
+test_expect_success 'moving remote clone' '
+	test_when_finished "rm -rf gitrepo*" &&
+
+	(
+	git clone "hg::hgrepo" gitrepo &&
+	mv gitrepo gitrepo2 &&
+	cd gitrepo2 &&
+	git fetch
+	)
+'
+
 test_expect_success 'remote update bookmark' '
 	test_when_finished "rm -rf gitrepo*" &&
 
-- 
1.8.5.rc1.30.g02973b8.dirty
Antoine Pelisse· Nov 23, 2013, 12:46 UTC · re: Antoine Pelisse · lore

Re: [PATCH] remote-hg: fix hg sharedpath when git clone is moved

On Sat, Nov 23, 2013 at 1:38 PM, Antoine Pelisse <apelisse@gmail.com> wrote:
Show 11 quoted lines
> remote-hg is using a mercurial shared clone to store all remotes objects
> in one place. Unfortunately, the sharedpath is stored as an absolute
> path by mercurial, creating a dependency on the location of the git
> repository. Whenever the git repository is moved, the sharedpath must
> be updated to reflect the new absolute path.
>
> Check mercurial sharedpath file when getting the local hg repository,
> and update it manually with the new path if necessary.
>
> Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
> ---

By the way, this is the only link [1] I found about both relative path and updating the file. So it looks like there is no other way to update the path but to write the file manually.

[1]: http://bz.selenic.com/show_bug.cgi?id=2006
Felipe Contreras· Nov 23, 2013, 16:32 UTC · re: Antoine Pelisse · lore

Re: [PATCH] remote-hg: fix hg sharedpath when git clone is moved

On Sat, Nov 23, 2013 at 6:38 AM, Antoine Pelisse <apelisse@gmail.com> wrote:
Show 10 quoted lines
> remote-hg is using a mercurial shared clone to store all remotes objects
> in one place. Unfortunately, the sharedpath is stored as an absolute
> path by mercurial, creating a dependency on the location of the git
> repository. Whenever the git repository is moved, the sharedpath must
> be updated to reflect the new absolute path.
>
> Check mercurial sharedpath file when getting the local hg repository,
> and update it manually with the new path if necessary.
>
> Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
https://github.com/felipec/git/commit/270e7ff91a4a34e8bc27edb6bd7d7473b886f568
-- 
Felipe Contreras
Antoine Pelisse· Nov 23, 2013, 16:35 UTC · re: Felipe Contreras · lore

Re: [PATCH] remote-hg: fix hg sharedpath when git clone is moved

On Sat, Nov 23, 2013 at 5:32 PM, Felipe Contreras <felipe.contreras@gmail.com> wrote:

Show 13 quoted lines
> On Sat, Nov 23, 2013 at 6:38 AM, Antoine Pelisse <apelisse@gmail.com> wrote:
>> remote-hg is using a mercurial shared clone to store all remotes objects
>> in one place. Unfortunately, the sharedpath is stored as an absolute
>> path by mercurial, creating a dependency on the location of the git
>> repository. Whenever the git repository is moved, the sharedpath must
>> be updated to reflect the new absolute path.
>>
>> Check mercurial sharedpath file when getting the local hg repository,
>> and update it manually with the new path if necessary.
>>
>> Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
>
> https://github.com/felipec/git/commit/270e7ff91a4a34e8bc27edb6bd7d7473b886f568
Or that, indeed :-)

← back to recent threads