From: Felipe Contreras <hidden> Date: 2016-06-15 22:58:23
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 <redacted>
---
contrib/remote-helpers/git-remote-hg | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
From: Felipe Contreras <hidden> Date: 2016-06-15 22:58:23
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 <redacted>
---
contrib/remote-helpers/git-remote-hg | 12 ++++++++++++
1 file changed, 12 insertions(+)
@@ -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)