From 52f0856a7bf06cf278ce1404a5d80070f327eee1 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Fri, 9 Aug 2013 17:38:03 -0500 Subject: 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 Reviewed-by: Antoine Pelisse Signed-off-by: Junio C Hamano --- contrib/remote-helpers/git-remote-hg | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'contrib/remote-helpers') diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg index 0194c67fb1..cfd4f53fe1 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) -- cgit v1.2.1 From 3baacc5cc6e4c2ed6184a7c5d9e10299999498dd Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Fri, 9 Aug 2013 17:38:04 -0500 Subject: 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 Reviewed-by: Antoine Pelisse Signed-off-by: Junio C Hamano --- contrib/remote-helpers/git-remote-hg | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'contrib/remote-helpers') diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg index cfd4f53fe1..d2ff0e2653 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) -- cgit v1.2.1