[PATCH] Updated patch to add remote destination support with suggestions from

Sean Meiners sean.meiners at linspire.com
Tue Jun 20 18:31:05 UTC 2006


# HG changeset patch
# User smeiners at slick.sd.linspire.com
# Node ID 6d436edb97de895b7954ea273224bd2b71aba6be
# Parent  a6cd9514f2bc94508ec0f13336ef5977de4cc013
Updated patch to add remote destination support with suggestions from  
Bryan O'Sullivan.

Changed option to update local hgrc to be off by default when the destination is remote. I'm hoping this will make it less contentious.

diff -r a6cd9514f2bc -r 6d436edb97de mercurial/commands.py
--- a/mercurial/commands.py	Mon Jun 19 16:50:52 2006 -0700
+++ b/mercurial/commands.py	Tue Jun 20 11:23:10 2006 -0700
@@ -882,31 +882,26 @@ def clone(ui, source, dest=None, **opts)
         ui.setconfig("ui", "remotecmd", opts['remotecmd'])
 
     source = ui.expandpath(source)
-    srcRepo = hg.repository(ui, source)
-
-    destRepo = None
+    src_repo = hg.repository(ui, source)
+
+    dest_repo = None
     try:
-        destRepo = hg.repository(ui, dest)
+        dest_repo = hg.repository(ui, dest)
+        raise util.Abort(_("destination '%s' already exists." % dest))
     except hg.RepoError:
-        pass
-
-    if destRepo:
-        error = _("destination '%s' already exists." % dest)
-        raise util.Abort(error)
-        
-    destRepo = hg.repository(ui, dest, create=1)
+        dest_repo = hg.repository(ui, dest, create=1)
 
     destPath = None
     d = None
-    if destRepo.dev() != -1
+    if dest_repo.dev() != -1
         destPath = os.path.realpath(dest)
         d = Dircleanup(destPath)
-        
+
     abspath = source
-    srcRepo = hg.repository(ui, source)
+    src_repo = hg.repository(ui, source)
 
     copy = False
-    if srcRepo.dev() != -1 and destRepo.dev() != -1:
+    if src_repo.dev() != -1 and dest_repo.dev() != -1:
         abspath = os.path.abspath(source)
         if not opts['pull'] and not opts['rev']:
             copy = True
@@ -917,7 +912,7 @@ def clone(ui, source, dest=None, **opts)
             # can end up with extra data in the cloned revlogs that's
             # not pointed to by changesets, thus causing verify to
             # fail
-            l1 = srcRepo.lock()
+            l1 = src_repo.lock()
         except lock.LockException:
             copy = False
 
@@ -939,52 +934,55 @@ def clone(ui, source, dest=None, **opts)
     else:
         revs = None
         if opts['rev']:
-            if not srcRepo.local():
+            if not src_repo.local():
                 error = _("clone -r not supported yet for remote repositories.")
                 raise util.Abort(error)
             else:
-                revs = [srcRepo.lookup(rev) for rev in opts['rev']]
-
-        if destRepo.dev() != -1:
-            destRepo.pull(srcRepo, heads = revs)
-        elif srcRepo.dev() != -1:
-            srcRepo.push(destRepo, revs = revs)
+                revs = [src_repo.lookup(rev) for rev in opts['rev']]
+
+        if dest_repo.dev() != -1:
+            dest_repo.pull(src_repo, heads = revs)
+        elif src_repo.dev() != -1:
+            src_repo.push(dest_repo, revs = revs)
         else:
             error = _("clone from remote to remote not supported.")
             raise util.Abort(error)
 
-    if destRepo.dev() != -1:
-        if not opts['nohgrc']:
-            f = destRepo.opener("hgrc", "w", text=True)
-            f.write("[paths]\n")
-            f.write("default = %s\n" % abspath)
-            f.close()
+    if dest_repo.dev() != -1:
+        f = dest_repo.opener("hgrc", "w", text=True)
+        f.write("[paths]\n")
+        f.write("default = %s\n" % abspath)
+        f.close()
 
         if not opts['noupdate']:
-            update(destRepo.ui, destRepo)
-            
-    elif srcRepo.dev() != -1:
-        if not opts['nohgrc']:
+            update(dest_repo.ui, dest_repo)
+
+    elif src_repo.dev() != -1:
+        if opts['update_hgrc']:
             inPaths = False
+            defaultFound = False
             groupRE = re.compile(r'^\s*\[([^\]]+)\].*')
             defaultRE = re.compile(r'^\s*default\s*=.*')
             lines = []
-            f = srcRepo.opener("hgrc", "r", text=True)
+            f = src_repo.opener("hgrc", "r", text=True)
             for line in f:
                 match = groupRE.match(line)
                 if match:
                     if match.group(1) == 'paths':
                         inPaths = True
                     else:
+                        if inPaths and not defaultFound:
+                            lines.append( 'default = %s\n' % dest )
                         inPaths = False
                 elif inPaths:
                     if defaultRE.match(line):
                         lines.append( 'default = %s\n' % dest )
+                        defaultFound = True
                         continue
                 lines.append(line)
             f.close()
-                
-            f = srcRepo.opener("hgrc", "w", text=True)
+
+            f = src_repo.opener("hgrc", "w", text=True)
             for line in lines:
                 f.write(line)
             f.close()
@@ -2879,7 +2877,7 @@ table = {
            _('a changeset you would like to have after cloning')),
           ('', 'pull', None, _('use pull protocol to copy metadata')),
           ('e', 'ssh', '', _('specify ssh command to use')),
-          ('n', 'nohgrc', None, _('do not update local hgrc file')),
+          ('u', 'update-hgrc', None, _('update local hgrc file to point to the remote repo')),
           ('', 'remotecmd', '',
            _('specify hg command to run on the remote side'))],
          _('hg clone [OPTION]... SOURCE [DEST]')),
diff -r a6cd9514f2bc -r 6d436edb97de mercurial/sshrepo.py
--- a/mercurial/sshrepo.py	Mon Jun 19 16:50:52 2006 -0700
+++ b/mercurial/sshrepo.py	Tue Jun 20 11:23:10 2006 -0700
@@ -44,10 +44,10 @@ class sshrepository(remoterepository):
             ui.note('running %s\n' % cmd)
             res = os.system(cmd)
             if res != 0:
-                raise hg.RepoError(_("Could not create remote repo"))
+                raise hg.RepoError(_("could not create remote repo"))
 
         self.validate_repo(ui, sshcmd, args, remotecmd)
-        
+
     def validate_repo(self, ui, sshcmd, args, remotecmd):
         cmd = '%s %s "%s -R %s serve --stdio"'
         cmd = cmd % (sshcmd, args, remotecmd, self.path)



More information about the Mercurial mailing list