merge with crew
authorBenoit Boissinot <benoit.boissinot@ens-lyon.org>
Tue, 31 Oct 2006 13:03:52 +0100
changeset 3594 5f08389bcf06
parent 3593 9bfb3c049b2a (current diff)
parent 3589 1c9b6f1237e0 (diff)
child 3595 fc34fd58ae7b
merge with crew
--- a/contrib/zsh_completion	Tue Oct 31 13:03:23 2006 +0100
+++ b/contrib/zsh_completion	Tue Oct 31 13:03:52 2006 +0100
@@ -140,13 +140,19 @@
 _hg_unknown() {
   typeset -a status_files
   _hg_status u
-  (( $#status_files )) && _describe -t files 'unknown files' status_files
+  _wanted files expl 'unknown files' _multi_parts / status_files
 }
 
 _hg_missing() {
   typeset -a status_files
   _hg_status d
-  (( $#status_files )) && _describe -t files 'missing files' status_files
+  _wanted files expl 'missing files' _multi_parts / status_files
+}
+
+_hg_modified() {
+  typeset -a status_files
+  _hg_status m
+  _wanted files expl 'modified files' _multi_parts / status_files
 }
 
 _hg_addremove() {
@@ -303,13 +309,24 @@
 }
 
 _hg_cmd_diff() {
+  typeset -A opt_args
   _arguments -s -w : $_hg_global_opts $_hg_pat_opts $_hg_diff_opts \
   '*'{-r,--rev}'+[revision]:revision:_hg_revrange' \
   '(--show-function -p)'{-p,--show-function}'[show which function each change is in]' \
   '(--ignore-all-space -w)'{-w,--ignore-all-space}'[ignore white space when comparing lines]' \
   '(--ignore-space-change -b)'{-b,--ignore-space-change}'[ignore changes in the amount of white space]' \
   '(--ignore-blank-lines -B)'{-B,--ignore-blank-lines}'[ignore changes whose lines are all blank]' \
-  '*:file:_files -W $(_hg_cmd root)'
+  '*:file:->diff_files'
+
+  if [[ $state == 'diff_files' ]]
+  then
+    if [[ -n $opt_args[-r] ]]
+    then
+      _files -W $(_hg_cmd root)
+    else
+      _hg_modified
+    fi
+  fi
 }
 
 _hg_cmd_export() {
@@ -448,7 +465,19 @@
   '(--all -a :)'{-a,--all}'[revert all changes when no arguments given]' \
   '(--rev -r)'{-r+,--rev}'[revision to revert to]:revision:_hg_tags' \
   '--no-backup[do not save backup copies of files]' \
-  '*:file:_files -W $(_hg_cmd root)'
+  '*:file:->diff_files'
+
+  if [[ $state == 'diff_files' ]]
+  then
+    if [[ -n $opt_args[-r] ]]
+    then
+      _files -W $(_hg_cmd root)
+    else
+      typeset -a status_files
+      _hg_status mard
+      _wanted files expl 'modified, added, removed or deleted file' _multi_parts / status_files
+    fi
+  fi
 }
 
 _hg_cmd_serve() {
--- a/mercurial/patch.py	Tue Oct 31 13:03:23 2006 +0100
+++ b/mercurial/patch.py	Tue Oct 31 13:03:52 2006 +0100
@@ -369,6 +369,9 @@
         if gp and gp.mode:
             x = gp.mode & 0100 != 0
             dst = os.path.join(repo.root, gp.path)
+            # patch won't create empty files
+            if ctype == 'ADD' and not os.path.exists(dst):
+                repo.wwrite(gp.path, '')
             util.set_exec(dst, x)
     cmdutil.addremove(repo, cfiles, wlock=wlock)
     files = patches.keys()
--- a/tests/test-git-import	Tue Oct 31 13:03:23 2006 +0100
+++ b/tests/test-git-import	Tue Oct 31 13:03:52 2006 +0100
@@ -14,6 +14,13 @@
 +a
 EOF
 
+echo % new empty file
+hg import -mempty - <<EOF
+diff --git a/empty b/empty
+new file mode 100644
+EOF
+hg locate empty
+
 echo % chmod +x
 hg import -msetx - <<EOF
 diff --git a/new b/new
--- a/tests/test-git-import.out	Tue Oct 31 13:03:23 2006 +0100
+++ b/tests/test-git-import.out	Tue Oct 31 13:03:52 2006 +0100
@@ -1,5 +1,8 @@
 % new file
 applying patch from stdin
+% new empty file
+applying patch from stdin
+empty
 % chmod +x
 applying patch from stdin
 % copy
@@ -9,10 +12,12 @@
 % rename
 applying patch from stdin
 copyx
+empty
 new
 rename
 % delete
 applying patch from stdin
+empty
 new
 rename
 % regular diff