changeset 5336:24de027551c1

Merge with crew-stable
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Mon, 24 Sep 2007 19:14:18 -0300
parents 8d00788ca578 (current diff) 88e931f74e8b (diff)
children 8c5ef3b87cb1
files hgext/convert/git.py hgext/mq.py mercurial/commands.py mercurial/hgweb/hgweb_mod.py mercurial/hgweb/hgwebdir_mod.py mercurial/httprepo.py tests/test-convert-git.out
diffstat 12 files changed, 92 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/convert/git.py
+++ b/hgext/convert/git.py
@@ -56,9 +56,14 @@ class convert_git(converter_source):
         self.modecache = {}
         fh = self.gitcmd("git-diff-tree --root -m -r %s" % version)
         changes = []
+        seen = {}
         for l in fh:
-            if "\t" not in l: continue
+            if "\t" not in l:
+                continue
             m, f = l[:-1].split("\t")
+            if f in seen:
+                continue
+            seen[f] = 1
             m = m.split()
             h = m[3]
             p = (m[1] == "100755")
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -1638,6 +1638,9 @@ def refresh(ui, repo, *pats, **opts):
     q = repo.mq
     message = cmdutil.logmessage(opts)
     if opts['edit']:
+        if not q.applied:
+            ui.write(_("No patches applied\n"))
+            return 1
         if message:
             raise util.Abort(_('option "-e" incompatible with "-m" or "-l"'))
         patch = q.applied[-1].name
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -598,9 +598,12 @@ def docopy(ui, repo, pats, opts):
         raise util.Abort(_('no destination specified'))
     dest = pats.pop()
     destdirexists = os.path.isdir(dest)
-    if (len(pats) > 1 or util.patkind(pats[0], None)[0]) and not destdirexists:
-        raise util.Abort(_('with multiple sources, destination must be an '
-                         'existing directory'))
+    if not destdirexists:
+        if len(pats) > 1 or util.patkind(pats[0], None)[0]:
+            raise util.Abort(_('with multiple sources, destination must be an '
+                               'existing directory'))
+        if dest.endswith(os.sep) or os.altsep and dest.endswith(os.altsep):
+            raise util.Abort(_('destination %s is not a directory') % dest)
     if opts['after']:
         tfn = targetpathafterfn
     else:
@@ -1470,6 +1473,10 @@ def identify(ui, repo, source=None,
     name for non-default branches.
     """
 
+    if not repo and not source:
+        raise util.Abort(_("There is no Mercurial repository here "
+                           "(.hg not found)"))
+
     hexfunc = ui.debugflag and hex or short
     default = not (num or id or branch or tags)
     output = []
@@ -3153,4 +3160,4 @@ table = {
 
 norepo = ("clone init version help debugancestor debugcomplete debugdata"
           " debugindex debugindexdot debugdate debuginstall")
-optionalrepo = ("paths serve showconfig")
+optionalrepo = ("identify paths serve showconfig")
--- a/mercurial/hgweb/hgweb_mod.py
+++ b/mercurial/hgweb/hgweb_mod.py
@@ -141,7 +141,10 @@ class hgweb(object):
     def nodebranchdict(self, ctx):
         branches = []
         branch = ctx.branch()
-        if self.repo.branchtags()[branch] == ctx.node():
+        # If this is an empty repo, ctx.node() == nullid,
+        # ctx.branch() == 'default', but branchtags() is
+        # an empty dict. Using dict.get avoids a traceback.
+        if self.repo.branchtags().get(branch) == ctx.node():
             branches.append({"name": branch})
         return branches
 
--- a/mercurial/hgweb/hgwebdir_mod.py
+++ b/mercurial/hgweb/hgwebdir_mod.py
@@ -146,8 +146,9 @@ class hgwebdir(object):
                 u = ui.ui(parentui=parentui)
                 try:
                     u.readconfig(os.path.join(path, '.hg', 'hgrc'))
-                except IOError:
-                    pass
+                except Exception, e:
+                    u.warn(_('error reading %s/.hg/hgrc: %s\n' % (path, e)))
+                    continue
                 def get(section, name, default=None):
                     return u.config(section, name, default, untrusted=True)
 
--- a/mercurial/httprepo.py
+++ b/mercurial/httprepo.py
@@ -298,8 +298,7 @@ class httprepository(remoterepository):
         cu = "%s%s" % (self._url, qs)
         try:
             if data:
-                self.ui.debug(_("sending %s bytes\n") %
-                              headers.get('content-length', 'X'))
+                self.ui.debug(_("sending %s bytes\n") % len(data))
             resp = urllib2.urlopen(request(cu, data, headers))
         except urllib2.HTTPError, inst:
             if inst.code == 401:
--- a/tests/test-convert-git
+++ b/tests/test-convert-git
@@ -5,15 +5,42 @@
 echo "[extensions]" >> $HGRCPATH
 echo "convert=" >> $HGRCPATH
 
+GIT_AUTHOR_NAME='test'; export GIT_AUTHOR_NAME
+GIT_AUTHOR_EMAIL='test@example.org'; export GIT_AUTHOR_EMAIL
+GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0000"; export GIT_AUTHOR_DATE
+GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_NAME
+GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_EMAIL
+GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; export GIT_COMMITTER_DATE
+
+count=10
+commit()
+{
+    GIT_AUTHOR_DATE="2007-01-01 00:00:$count +0000"
+    GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
+    git commit "$@" >/dev/null 2>/dev/null || echo "git commit error"
+    count=`expr $count + 1`
+}
+
 mkdir git-repo
 cd git-repo
 git init-db >/dev/null 2>/dev/null
 echo a > a
 git add a
-git commit -m t1 >/dev/null 2>/dev/null || echo "git commit error"
+commit -m t1
+
 echo b >> a
-git commit -a -m t2 >/dev/null || echo "git commit error"
+commit -a -m t2.1
+
+git checkout -b other HEAD^ >/dev/null 2>/dev/null
+echo c > a
+echo a >> a
+commit -a -m t2.2
+
+git checkout master >/dev/null 2>/dev/null
+git pull --no-commit . other > /dev/null 2>/dev/null
+commit -m 'Merge branch other'
 cd ..
 
-hg convert git-repo
+hg convert --datesort git-repo
 
+hg -R git-repo-hg tip -v
--- a/tests/test-convert-git.out
+++ b/tests/test-convert-git.out
@@ -3,5 +3,20 @@ initializing destination git-repo-hg rep
 scanning source...
 sorting...
 converting...
-1 t1
-0 t2
+3 t1
+2 t2.1
+1 t2.2
+0 Merge branch other
+changeset:   3:69b3a302b4a1
+tag:         tip
+parent:      1:0de2a40e261b
+parent:      2:8815d3b33506
+user:        test <test@example.org>
+date:        Mon Jan 01 00:00:13 2007 +0000
+files:       a
+description:
+Merge branch other
+
+committer: test <test@example.org>
+
+
--- a/tests/test-mq-qrefresh-replace-log-message
+++ b/tests/test-mq-qrefresh-replace-log-message
@@ -8,6 +8,11 @@ echo "mq=" >> $HGRCPATH
 hg init
 hg qinit
 
+echo =======================
+echo "Should fail if no patches applied"
+hg qrefresh
+hg qrefresh -e
+
 hg qnew -m "First commit message" first-patch
 echo aaaa > file
 hg add file
--- a/tests/test-mq-qrefresh-replace-log-message.out
+++ b/tests/test-mq-qrefresh-replace-log-message.out
@@ -1,3 +1,7 @@
+=======================
+Should fail if no patches applied
+No patches applied
+No patches applied
 =======================
 Should display 'First commit message'
 description:
--- a/tests/test-rename
+++ b/tests/test-rename
@@ -88,6 +88,11 @@ hg status -C
 diff d1/b d2/b
 hg update -C
 
+echo "# attempt to move one file into a non-existent directory"
+hg rename d1/a dx/
+hg status -C
+hg update -C
+
 echo "# attempt to move potentially more than one file into a non-existent"
 echo "# directory"
 hg rename 'glob:d1/**' dx
--- a/tests/test-rename.out
+++ b/tests/test-rename.out
@@ -166,6 +166,9 @@ 1c1
 ---
 > d2/b
 3 files updated, 0 files merged, 3 files removed, 0 files unresolved
+# attempt to move one file into a non-existent directory
+abort: destination dx/ is not a directory
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # attempt to move potentially more than one file into a non-existent
 # directory
 abort: with multiple sources, destination must be an existing directory