Show More
@@ -8,9 +8,9 b'' | |||||
8 | # |
|
8 | # | |
9 | # Mercurial allows you to define additional commands through extensions. |
|
9 | # Mercurial allows you to define additional commands through extensions. | |
10 | # Bash should be able to automatically figure out the name of these new |
|
10 | # Bash should be able to automatically figure out the name of these new | |
11 |
# commands and their options. |
|
11 | # commands and their options. See below for how to define _hg_opt_foo | |
12 | # complete non-option arguments, see below for how to define an |
|
12 | # and _hg_cmd_foo functions to fine-tune the completion for option and | |
13 | # _hg_cmd_foo function. |
|
13 | # non-option arguments, respectively. | |
14 | # |
|
14 | # | |
15 | # |
|
15 | # | |
16 | # Notes about completion for specific commands: |
|
16 | # Notes about completion for specific commands: | |
@@ -34,7 +34,10 b'' | |||||
34 | # |
|
34 | # | |
35 | # If it exists, the function _hg_cmd_foo will be called without |
|
35 | # If it exists, the function _hg_cmd_foo will be called without | |
36 | # arguments to generate the completion candidates for the hg command |
|
36 | # arguments to generate the completion candidates for the hg command | |
37 | # "foo". |
|
37 | # "foo". If the command receives some arguments that aren't options | |
|
38 | # even though they start with a "-", you can define a function called | |||
|
39 | # _hg_opt_foo to generate the completion candidates. If _hg_opt_foo | |||
|
40 | # doesn't return 0, regular completion for options is attempted. | |||
38 | # |
|
41 | # | |
39 | # In addition to the regular completion variables provided by bash, |
|
42 | # In addition to the regular completion variables provided by bash, | |
40 | # the following variables are also set: |
|
43 | # the following variables are also set: | |
@@ -109,6 +112,7 b' shopt -s extglob' | |||||
109 | # global options that receive an argument |
|
112 | # global options that receive an argument | |
110 | local global_args='--cwd|-R|--repository' |
|
113 | local global_args='--cwd|-R|--repository' | |
111 | local hg="$1" |
|
114 | local hg="$1" | |
|
115 | local canonical=0 | |||
112 |
|
116 | |||
113 | COMPREPLY=() |
|
117 | COMPREPLY=() | |
114 | cur="$2" |
|
118 | cur="$2" | |
@@ -128,6 +132,10 b' shopt -s extglob' | |||||
128 | done |
|
132 | done | |
129 |
|
133 | |||
130 | if [[ "$cur" == -* ]]; then |
|
134 | if [[ "$cur" == -* ]]; then | |
|
135 | if [ "$(type -t "_hg_opt_$cmd")" = function ] && "_hg_opt_$cmd"; then | |||
|
136 | return | |||
|
137 | fi | |||
|
138 | ||||
131 | opts=$("$hg" debugcomplete --options "$cmd" 2>/dev/null) |
|
139 | opts=$("$hg" debugcomplete --options "$cmd" 2>/dev/null) | |
132 |
|
140 | |||
133 | COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$opts' -- "$cur")) |
|
141 | COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$opts' -- "$cur")) | |
@@ -153,7 +161,6 b' shopt -s extglob' | |||||
153 |
|
161 | |||
154 | # try to generate completion candidates for whatever command the user typed |
|
162 | # try to generate completion candidates for whatever command the user typed | |
155 | local help |
|
163 | local help | |
156 | local canonical=0 |
|
|||
157 | if _hg_command_specific; then |
|
164 | if _hg_command_specific; then | |
158 | return |
|
165 | return | |
159 | fi |
|
166 | fi | |
@@ -193,7 +200,13 b' shopt -s extglob' | |||||
193 | help) |
|
200 | help) | |
194 | _hg_commands |
|
201 | _hg_commands | |
195 | ;; |
|
202 | ;; | |
196 | export|manifest|update) |
|
203 | export) | |
|
204 | if _hg_ext_mq_patchlist qapplied && [ "${COMPREPLY[*]}" ]; then | |||
|
205 | return 0 | |||
|
206 | fi | |||
|
207 | _hg_tags | |||
|
208 | ;; | |||
|
209 | manifest|update) | |||
197 | _hg_tags |
|
210 | _hg_tags | |
198 | ;; |
|
211 | ;; | |
199 | pull|push|outgoing|incoming) |
|
212 | pull|push|outgoing|incoming) | |
@@ -251,8 +264,13 b' complete -o bashdefault -o default -F _h' | |||||
251 | # mq |
|
264 | # mq | |
252 | _hg_ext_mq_patchlist() |
|
265 | _hg_ext_mq_patchlist() | |
253 | { |
|
266 | { | |
254 | local patches=$("$hg" $1 2>/dev/null) |
|
267 | local patches | |
255 | COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$patches' -- "$cur")) |
|
268 | patches=$("$hg" $1 2>/dev/null) | |
|
269 | if [ $? -eq 0 ] && [ "$patches" ]; then | |||
|
270 | COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$patches' -- "$cur")) | |||
|
271 | return 0 | |||
|
272 | fi | |||
|
273 | return 1 | |||
256 | } |
|
274 | } | |
257 |
|
275 | |||
258 | _hg_ext_mq_queues() |
|
276 | _hg_ext_mq_queues() | |
@@ -288,7 +306,11 b' complete -o bashdefault -o default -F _h' | |||||
288 |
|
306 | |||
289 | _hg_cmd_qdelete() |
|
307 | _hg_cmd_qdelete() | |
290 | { |
|
308 | { | |
291 | _hg_ext_mq_patchlist qunapplied |
|
309 | local qcmd=qunapplied | |
|
310 | if [[ "$prev" = @(-r|--rev) ]]; then | |||
|
311 | qcmd=qapplied | |||
|
312 | fi | |||
|
313 | _hg_ext_mq_patchlist $qcmd | |||
292 | } |
|
314 | } | |
293 |
|
315 | |||
294 | _hg_cmd_qsave() |
|
316 | _hg_cmd_qsave() | |
@@ -313,9 +335,76 b' complete -o bashdefault -o default -F _h' | |||||
313 | COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur")) |
|
335 | COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur")) | |
314 | } |
|
336 | } | |
315 |
|
337 | |||
316 |
_hg_cmd_ |
|
338 | _hg_cmd_qfold() | |
|
339 | { | |||
|
340 | _hg_ext_mq_patchlist qunapplied | |||
|
341 | } | |||
|
342 | ||||
|
343 | _hg_cmd_qrename() | |||
|
344 | { | |||
|
345 | _hg_ext_mq_patchlist qseries | |||
|
346 | } | |||
|
347 | ||||
|
348 | _hg_cmd_qheader() | |||
|
349 | { | |||
|
350 | _hg_ext_mq_patchlist qseries | |||
|
351 | } | |||
|
352 | ||||
|
353 | _hg_cmd_qclone() | |||
|
354 | { | |||
|
355 | local count=$(_hg_count_non_option) | |||
|
356 | if [ $count = 1 ]; then | |||
|
357 | _hg_paths | |||
|
358 | fi | |||
|
359 | _hg_repos | |||
|
360 | } | |||
|
361 | ||||
|
362 | _hg_ext_mq_guards() | |||
|
363 | { | |||
|
364 | "$hg" qselect --series 2>/dev/null | sed -e 's/^.//' | |||
|
365 | } | |||
|
366 | ||||
|
367 | _hg_cmd_qselect() | |||
317 | { |
|
368 | { | |
318 | _hg_ext_mq_patchlist qapplied |
|
369 | local guards=$(_hg_ext_mq_guards) | |
|
370 | COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$guards' -- "$cur")) | |||
|
371 | } | |||
|
372 | ||||
|
373 | _hg_cmd_qguard() | |||
|
374 | { | |||
|
375 | local prefix='' | |||
|
376 | ||||
|
377 | if [[ "$cur" == +* ]]; then | |||
|
378 | prefix=+ | |||
|
379 | elif [[ "$cur" == -* ]]; then | |||
|
380 | prefix=- | |||
|
381 | fi | |||
|
382 | local ncur=${cur#[-+]} | |||
|
383 | ||||
|
384 | if ! [ "$prefix" ]; then | |||
|
385 | _hg_ext_mq_patchlist qseries | |||
|
386 | return | |||
|
387 | fi | |||
|
388 | ||||
|
389 | local guards=$(_hg_ext_mq_guards) | |||
|
390 | COMPREPLY=(${COMPREPLY[@]:-} $(compgen -P $prefix -W '$guards' -- "$ncur")) | |||
|
391 | } | |||
|
392 | ||||
|
393 | _hg_opt_qguard() | |||
|
394 | { | |||
|
395 | local i | |||
|
396 | for ((i=cmd_index+1; i<=COMP_CWORD; i++)); do | |||
|
397 | if [[ ${COMP_WORDS[i]} != -* ]]; then | |||
|
398 | if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then | |||
|
399 | _hg_cmd_qguard | |||
|
400 | return 0 | |||
|
401 | fi | |||
|
402 | elif [ "${COMP_WORDS[i]}" = -- ]; then | |||
|
403 | _hg_cmd_qguard | |||
|
404 | return 0 | |||
|
405 | fi | |||
|
406 | done | |||
|
407 | return 1 | |||
319 | } |
|
408 | } | |
320 |
|
409 | |||
321 |
|
410 | |||
@@ -354,7 +443,7 b' complete -o bashdefault -o default -F _h' | |||||
354 | _hg_cmd_email() |
|
443 | _hg_cmd_email() | |
355 | { |
|
444 | { | |
356 | case "$prev" in |
|
445 | case "$prev" in | |
357 | -c|--cc|-t|--to|-f|--from) |
|
446 | -c|--cc|-t|--to|-f|--from|--bcc) | |
358 | # we need an e-mail address. let the user provide a function |
|
447 | # we need an e-mail address. let the user provide a function | |
359 | # to get them |
|
448 | # to get them | |
360 | if [ "$(type -t _hg_emails)" = function ]; then |
|
449 | if [ "$(type -t _hg_emails)" = function ]; then |
@@ -14,7 +14,18 b'' | |||||
14 |
|
14 | |||
15 | local curcontext="$curcontext" state line |
|
15 | local curcontext="$curcontext" state line | |
16 | typeset -A opt_args |
|
16 | typeset -A opt_args | |
17 | local subcmds repos tags newFiles addedFiles includeExclude |
|
17 | local subcmds repos tags newFiles addedFiles includeExclude commitMessage | |
|
18 | ||||
|
19 | _mq_state () { | |||
|
20 | case "$state" in | |||
|
21 | (qapplied) | |||
|
22 | compadd $(hg qapplied) | |||
|
23 | ;; | |||
|
24 | (qunapplied) | |||
|
25 | compadd $(hg qunapplied) | |||
|
26 | ;; | |||
|
27 | esac | |||
|
28 | } | |||
18 |
|
29 | |||
19 | tags=($(hg tags 2> /dev/null | sed -e 's/[0-9]*:[a-f0-9]\{40\}$//; s/ *$//')) |
|
30 | tags=($(hg tags 2> /dev/null | sed -e 's/[0-9]*:[a-f0-9]\{40\}$//; s/ *$//')) | |
20 | subcmds=($(hg -v help | sed -e '1,/^list of commands:/d' \ |
|
31 | subcmds=($(hg -v help | sed -e '1,/^list of commands:/d' \ | |
@@ -27,6 +38,14 b' includeExclude=(' | |||||
27 | '*-X-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/' |
|
38 | '*-X-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/' | |
28 | '*--exclude-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/') |
|
39 | '*--exclude-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/') | |
29 |
|
40 | |||
|
41 | commitMessage=( | |||
|
42 | '(-m --message -l --logfile --edit)-e[edit commit message]' | |||
|
43 | '(-m --message -l --logfile -e)--edit[edit commit message]' | |||
|
44 | '(-e --edit -l --logfile --message)-m[use <text> as commit message]:message:' | |||
|
45 | '(-e --edit -l --logfile -m)--message[use <text> as commit message]:message:' | |||
|
46 | '(-e --edit -m --message --logfile)-l[read the commit message from <file>]:log file:_files' | |||
|
47 | '(-e --edit -m --message -l)--logfile[read the commit message from <file>]:log file:_files') | |||
|
48 | ||||
30 | if [[ $service == "hg" ]]; then |
|
49 | if [[ $service == "hg" ]]; then | |
31 | _arguments -C -A "-*" \ |
|
50 | _arguments -C -A "-*" \ | |
32 | '(--repository)-R[repository root directory]:root:_files -/' \ |
|
51 | '(--repository)-R[repository root directory]:root:_files -/' \ | |
@@ -419,6 +438,43 b' case $service in' | |||||
419 | # no arguments for these commands |
|
438 | # no arguments for these commands | |
420 | ;; |
|
439 | ;; | |
421 |
|
440 | |||
|
441 | # MQ commands | |||
|
442 | (qdel*|qrm|qrem*) | |||
|
443 | _arguments \ | |||
|
444 | {-k,--keep}'[keep patch file]' \ | |||
|
445 | {-r,--rev}'[revision]:applied patch:->qapplied' \ | |||
|
446 | '*:unapplied patches:->qunapplied' | |||
|
447 | _mq_state | |||
|
448 | ;; | |||
|
449 | ||||
|
450 | (qnew) | |||
|
451 | _arguments $commitMessage \ | |||
|
452 | {-f,--force}'[import uncommitted changes into patch]' \ | |||
|
453 | ':patch name:' | |||
|
454 | ;; | |||
|
455 | ||||
|
456 | (qpo*) | |||
|
457 | applied=( $(hg qapplied) ) | |||
|
458 | _arguments \ | |||
|
459 | (1){-a,--all}'[pop all patches]' \ | |||
|
460 | {-f,--force}'[forget any local changes]' \ | |||
|
461 | ':applied patch:->qapplied' | |||
|
462 | _mq_state | |||
|
463 | ;; | |||
|
464 | ||||
|
465 | (qpu*) | |||
|
466 | _arguments \ | |||
|
467 | (1){-a,--all}'[apply all patches]' \ | |||
|
468 | {-f,--force}'[apply if the patch has rejects]' \ | |||
|
469 | ':unapplied patch:->qunapplied' | |||
|
470 | _mq_state | |||
|
471 | ;; | |||
|
472 | (qref*) | |||
|
473 | _arguments $commitMessage $includeExclude \ | |||
|
474 | {-g,--git}'[use git extended diff format]' \ | |||
|
475 | {-s,--short}'[short refresh]' | |||
|
476 | ;; | |||
|
477 | ||||
422 | (*) |
|
478 | (*) | |
423 | _message "unknown hg command completion: $service" |
|
479 | _message "unknown hg command completion: $service" | |
424 | ;; |
|
480 | ;; |
@@ -401,9 +401,8 b' ui::' | |||||
401 | username;; |
|
401 | username;; | |
402 | The committer of a changeset created when running "commit". |
|
402 | The committer of a changeset created when running "commit". | |
403 | Typically a person's name and email address, e.g. "Fred Widget |
|
403 | Typically a person's name and email address, e.g. "Fred Widget | |
404 |
<fred@example.com>". Default is $EMAIL |
|
404 | <fred@example.com>". Default is $EMAIL. If no default is found, or the | |
405 | username is set to an empty string, which enforces specifying the |
|
405 | configured username is empty, it has to be specified manually. | |
406 | username manually. |
|
|||
407 | verbose;; |
|
406 | verbose;; | |
408 | Increase the amount of output printed. True or False. Default is False. |
|
407 | Increase the amount of output printed. True or False. Default is False. | |
409 |
|
408 |
@@ -177,7 +177,7 b' def revtree(args, repo, full="tree", max' | |||||
177 | if len(ar) == 0: |
|
177 | if len(ar) == 0: | |
178 | return 1 |
|
178 | return 1 | |
179 | mask = 0 |
|
179 | mask = 0 | |
180 | for i in range(len(ar)): |
|
180 | for i in xrange(len(ar)): | |
181 | if sha in reachable[i]: |
|
181 | if sha in reachable[i]: | |
182 | mask |= 1 << i |
|
182 | mask |= 1 << i | |
183 |
|
183 | |||
@@ -190,7 +190,7 b' def revtree(args, repo, full="tree", max' | |||||
190 |
|
190 | |||
191 | # figure out which commits they are asking for and which ones they |
|
191 | # figure out which commits they are asking for and which ones they | |
192 | # want us to stop on |
|
192 | # want us to stop on | |
193 | for i in range(len(args)): |
|
193 | for i in xrange(len(args)): | |
194 | if args[i].startswith('^'): |
|
194 | if args[i].startswith('^'): | |
195 | s = repo.lookup(args[i][1:]) |
|
195 | s = repo.lookup(args[i][1:]) | |
196 | stop_sha1.append(s) |
|
196 | stop_sha1.append(s) | |
@@ -199,7 +199,7 b' def revtree(args, repo, full="tree", max' | |||||
199 | want_sha1.append(repo.lookup(args[i])) |
|
199 | want_sha1.append(repo.lookup(args[i])) | |
200 |
|
200 | |||
201 | # calculate the graph for the supplied commits |
|
201 | # calculate the graph for the supplied commits | |
202 | for i in range(len(want_sha1)): |
|
202 | for i in xrange(len(want_sha1)): | |
203 | reachable.append({}); |
|
203 | reachable.append({}); | |
204 | n = want_sha1[i]; |
|
204 | n = want_sha1[i]; | |
205 | visit = [n]; |
|
205 | visit = [n]; |
@@ -408,14 +408,15 b' class queue:' | |||||
408 | def patch(self, repo, patchfile): |
|
408 | def patch(self, repo, patchfile): | |
409 | '''Apply patchfile to the working directory. |
|
409 | '''Apply patchfile to the working directory. | |
410 | patchfile: file name of patch''' |
|
410 | patchfile: file name of patch''' | |
|
411 | files = {} | |||
411 | try: |
|
412 | try: | |
412 |
|
|
413 | fuzz = patch.patch(patchfile, self.ui, strip=1, cwd=repo.root, | |
413 |
|
|
414 | files=files) | |
414 | except Exception, inst: |
|
415 | except Exception, inst: | |
415 | self.ui.note(str(inst) + '\n') |
|
416 | self.ui.note(str(inst) + '\n') | |
416 | if not self.ui.verbose: |
|
417 | if not self.ui.verbose: | |
417 | self.ui.warn("patch failed, unable to continue (try -v)\n") |
|
418 | self.ui.warn("patch failed, unable to continue (try -v)\n") | |
418 |
return (False, |
|
419 | return (False, files, False) | |
419 |
|
420 | |||
420 | return (True, files, fuzz) |
|
421 | return (True, files, fuzz) | |
421 |
|
422 | |||
@@ -592,7 +593,7 b' class queue:' | |||||
592 | if stop in chlog.nodemap: |
|
593 | if stop in chlog.nodemap: | |
593 | stoprev = chlog.rev(stop) |
|
594 | stoprev = chlog.rev(stop) | |
594 |
|
595 | |||
595 | for r in range(chlog.count() - 1, -1, -1): |
|
596 | for r in xrange(chlog.count() - 1, -1, -1): | |
596 | n = chlog.node(r) |
|
597 | n = chlog.node(r) | |
597 | if n not in p: |
|
598 | if n not in p: | |
598 | h.append(n) |
|
599 | h.append(n) | |
@@ -954,7 +955,7 b' class queue:' | |||||
954 | if comments: |
|
955 | if comments: | |
955 | # Remove existing message. |
|
956 | # Remove existing message. | |
956 | ci = 0 |
|
957 | ci = 0 | |
957 | for mi in range(len(message)): |
|
958 | for mi in xrange(len(message)): | |
958 | while message[mi] != comments[ci]: |
|
959 | while message[mi] != comments[ci]: | |
959 | ci += 1 |
|
960 | ci += 1 | |
960 | del comments[ci] |
|
961 | del comments[ci] | |
@@ -1035,7 +1036,7 b' class queue:' | |||||
1035 | # if the patch excludes a modified file, mark that file with mtime=0 |
|
1036 | # if the patch excludes a modified file, mark that file with mtime=0 | |
1036 | # so status can see it. |
|
1037 | # so status can see it. | |
1037 | mm = [] |
|
1038 | mm = [] | |
1038 | for i in range(len(m)-1, -1, -1): |
|
1039 | for i in xrange(len(m)-1, -1, -1): | |
1039 | if not matchfn(m[i]): |
|
1040 | if not matchfn(m[i]): | |
1040 | mm.append(m[i]) |
|
1041 | mm.append(m[i]) | |
1041 | del m[i] |
|
1042 | del m[i] | |
@@ -1103,7 +1104,7 b' class queue:' | |||||
1103 | if not length: |
|
1104 | if not length: | |
1104 | length = len(self.series) - start |
|
1105 | length = len(self.series) - start | |
1105 | if not missing: |
|
1106 | if not missing: | |
1106 | for i in range(start, start+length): |
|
1107 | for i in xrange(start, start+length): | |
1107 | pfx = '' |
|
1108 | pfx = '' | |
1108 | patch = pname(i) |
|
1109 | patch = pname(i) | |
1109 | if self.ui.verbose: |
|
1110 | if self.ui.verbose: |
@@ -195,7 +195,7 b' def patchbomb(ui, repo, *revs, **opts):' | |||||
195 |
|
195 | |||
196 | ui.write(_('This patch series consists of %d patches.\n\n') % len(patches)) |
|
196 | ui.write(_('This patch series consists of %d patches.\n\n') % len(patches)) | |
197 |
|
197 | |||
198 | for p, i in zip(patches, range(len(patches))): |
|
198 | for p, i in zip(patches, xrange(len(patches))): | |
199 | jumbo.extend(p) |
|
199 | jumbo.extend(p) | |
200 | msgs.append(makepatch(p, i + 1, len(patches))) |
|
200 | msgs.append(makepatch(p, i + 1, len(patches))) | |
201 |
|
201 |
@@ -219,7 +219,7 b' def walkchangerevs(ui, repo, pats, opts)' | |||||
219 | rev = repo.changelog.rev(repo.lookup(rev)) |
|
219 | rev = repo.changelog.rev(repo.lookup(rev)) | |
220 | ff = followfilter() |
|
220 | ff = followfilter() | |
221 | stop = min(revs[0], revs[-1]) |
|
221 | stop = min(revs[0], revs[-1]) | |
222 | for x in range(rev, stop-1, -1): |
|
222 | for x in xrange(rev, stop-1, -1): | |
223 | if ff.match(x) and wanted.has_key(x): |
|
223 | if ff.match(x) and wanted.has_key(x): | |
224 | del wanted[x] |
|
224 | del wanted[x] | |
225 |
|
225 | |||
@@ -326,7 +326,8 b' class changeset_printer(object):' | |||||
326 |
|
326 | |||
327 | changes = log.read(changenode) |
|
327 | changes = log.read(changenode) | |
328 | date = util.datestr(changes[2]) |
|
328 | date = util.datestr(changes[2]) | |
329 |
|
|
329 | extra = changes[5] | |
|
330 | branch = extra.get("branch") | |||
330 |
|
331 | |||
331 | hexfunc = self.ui.debugflag and hex or short |
|
332 | hexfunc = self.ui.debugflag and hex or short | |
332 |
|
333 | |||
@@ -360,12 +361,19 b' class changeset_printer(object):' | |||||
360 | files): |
|
361 | files): | |
361 | if value: |
|
362 | if value: | |
362 | self.ui.note("%-12s %s\n" % (key, " ".join(value))) |
|
363 | self.ui.note("%-12s %s\n" % (key, " ".join(value))) | |
363 |
el |
|
364 | elif changes[3]: | |
364 | self.ui.note(_("files: %s\n") % " ".join(changes[3])) |
|
365 | self.ui.note(_("files: %s\n") % " ".join(changes[3])) | |
365 | if copies: |
|
366 | if copies: | |
366 | copies = ['%s (%s)' % c for c in copies] |
|
367 | copies = ['%s (%s)' % c for c in copies] | |
367 | self.ui.note(_("copies: %s\n") % ' '.join(copies)) |
|
368 | self.ui.note(_("copies: %s\n") % ' '.join(copies)) | |
368 |
|
369 | |||
|
370 | if extra and self.ui.debugflag: | |||
|
371 | extraitems = extra.items() | |||
|
372 | extraitems.sort() | |||
|
373 | for key, value in extraitems: | |||
|
374 | self.ui.debug(_("extra: %s=%s\n") | |||
|
375 | % (key, value.encode('string_escape'))) | |||
|
376 | ||||
369 | description = changes[4].strip() |
|
377 | description = changes[4].strip() | |
370 | if description: |
|
378 | if description: | |
371 | if self.ui.verbose: |
|
379 | if self.ui.verbose: | |
@@ -1237,7 +1245,7 b' def debugindex(ui, file_):' | |||||
1237 | r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_, "", 0) |
|
1245 | r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_, "", 0) | |
1238 | ui.write(" rev offset length base linkrev" + |
|
1246 | ui.write(" rev offset length base linkrev" + | |
1239 | " nodeid p1 p2\n") |
|
1247 | " nodeid p1 p2\n") | |
1240 | for i in range(r.count()): |
|
1248 | for i in xrange(r.count()): | |
1241 | node = r.node(i) |
|
1249 | node = r.node(i) | |
1242 | pp = r.parents(node) |
|
1250 | pp = r.parents(node) | |
1243 | ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % ( |
|
1251 | ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % ( | |
@@ -1248,7 +1256,7 b' def debugindexdot(ui, file_):' | |||||
1248 | """dump an index DAG as a .dot file""" |
|
1256 | """dump an index DAG as a .dot file""" | |
1249 | r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_, "", 0) |
|
1257 | r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_, "", 0) | |
1250 | ui.write("digraph G {\n") |
|
1258 | ui.write("digraph G {\n") | |
1251 | for i in range(r.count()): |
|
1259 | for i in xrange(r.count()): | |
1252 | node = r.node(i) |
|
1260 | node = r.node(i) | |
1253 | pp = r.parents(node) |
|
1261 | pp = r.parents(node) | |
1254 | ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i)) |
|
1262 | ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i)) | |
@@ -1435,15 +1443,15 b' def grep(ui, repo, pattern, *pats, **opt' | |||||
1435 | sm = difflib.SequenceMatcher(None, a, b) |
|
1443 | sm = difflib.SequenceMatcher(None, a, b) | |
1436 | for tag, alo, ahi, blo, bhi in sm.get_opcodes(): |
|
1444 | for tag, alo, ahi, blo, bhi in sm.get_opcodes(): | |
1437 | if tag == 'insert': |
|
1445 | if tag == 'insert': | |
1438 | for i in range(blo, bhi): |
|
1446 | for i in xrange(blo, bhi): | |
1439 | yield ('+', b[i]) |
|
1447 | yield ('+', b[i]) | |
1440 | elif tag == 'delete': |
|
1448 | elif tag == 'delete': | |
1441 | for i in range(alo, ahi): |
|
1449 | for i in xrange(alo, ahi): | |
1442 | yield ('-', a[i]) |
|
1450 | yield ('-', a[i]) | |
1443 | elif tag == 'replace': |
|
1451 | elif tag == 'replace': | |
1444 | for i in range(alo, ahi): |
|
1452 | for i in xrange(alo, ahi): | |
1445 | yield ('-', a[i]) |
|
1453 | yield ('-', a[i]) | |
1446 | for i in range(blo, bhi): |
|
1454 | for i in xrange(blo, bhi): | |
1447 | yield ('+', b[i]) |
|
1455 | yield ('+', b[i]) | |
1448 |
|
1456 | |||
1449 | prev = {} |
|
1457 | prev = {} | |
@@ -1648,8 +1656,12 b' def import_(ui, repo, patch1, *patches, ' | |||||
1648 | message = None |
|
1656 | message = None | |
1649 | ui.debug(_('message:\n%s\n') % message) |
|
1657 | ui.debug(_('message:\n%s\n') % message) | |
1650 |
|
1658 | |||
1651 | files, fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root) |
|
1659 | files = {} | |
1652 | files = patch.updatedir(ui, repo, files, wlock=wlock) |
|
1660 | try: | |
|
1661 | fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root, | |||
|
1662 | files=files) | |||
|
1663 | finally: | |||
|
1664 | files = patch.updatedir(ui, repo, files, wlock=wlock) | |||
1653 | repo.commit(files, message, user, date, wlock=wlock, lock=lock) |
|
1665 | repo.commit(files, message, user, date, wlock=wlock, lock=lock) | |
1654 | finally: |
|
1666 | finally: | |
1655 | os.unlink(tmpname) |
|
1667 | os.unlink(tmpname) | |
@@ -2091,11 +2103,11 b' def pull(ui, repo, source="default", **o' | |||||
2091 | Use an extra slash at the start of a path to specify an absolute path: |
|
2103 | Use an extra slash at the start of a path to specify an absolute path: | |
2092 | ssh://example.com//tmp/repository |
|
2104 | ssh://example.com//tmp/repository | |
2093 | - Mercurial doesn't use its own compression via SSH; the right thing |
|
2105 | - Mercurial doesn't use its own compression via SSH; the right thing | |
2094 |
to do is to configure it in your ~/.ssh/ |
|
2106 | to do is to configure it in your ~/.ssh/config, e.g.: | |
2095 | Host *.mylocalnetwork.example.com |
|
2107 | Host *.mylocalnetwork.example.com | |
2096 |
Compression o |
|
2108 | Compression no | |
2097 | Host * |
|
2109 | Host * | |
2098 |
Compression |
|
2110 | Compression yes | |
2099 | Alternatively specify "ssh -C" as your ssh command in your hgrc or |
|
2111 | Alternatively specify "ssh -C" as your ssh command in your hgrc or | |
2100 | with the --ssh command line option. |
|
2112 | with the --ssh command line option. | |
2101 | """ |
|
2113 | """ | |
@@ -2538,6 +2550,9 b' def status(ui, repo, *pats, **opts):' | |||||
2538 | files that match are shown. Files that are clean or ignored, are |
|
2550 | files that match are shown. Files that are clean or ignored, are | |
2539 | not listed unless -c (clean), -i (ignored) or -A is given. |
|
2551 | not listed unless -c (clean), -i (ignored) or -A is given. | |
2540 |
|
2552 | |||
|
2553 | If one revision is given, it is used as the base revision. | |||
|
2554 | If two revisions are given, the difference between them is shown. | |||
|
2555 | ||||
2541 | The codes used to show the status of files are: |
|
2556 | The codes used to show the status of files are: | |
2542 | M = modified |
|
2557 | M = modified | |
2543 | A = added |
|
2558 | A = added | |
@@ -2550,12 +2565,14 b' def status(ui, repo, *pats, **opts):' | |||||
2550 | """ |
|
2565 | """ | |
2551 |
|
2566 | |||
2552 | all = opts['all'] |
|
2567 | all = opts['all'] | |
|
2568 | node1, node2 = cmdutil.revpair(ui, repo, opts.get('rev')) | |||
2553 |
|
2569 | |||
2554 | files, matchfn, anypats = cmdutil.matchpats(repo, pats, opts) |
|
2570 | files, matchfn, anypats = cmdutil.matchpats(repo, pats, opts) | |
2555 | cwd = (pats and repo.getcwd()) or '' |
|
2571 | cwd = (pats and repo.getcwd()) or '' | |
2556 | modified, added, removed, deleted, unknown, ignored, clean = [ |
|
2572 | modified, added, removed, deleted, unknown, ignored, clean = [ | |
2557 | [util.pathto(cwd, x) for x in n] |
|
2573 | [util.pathto(cwd, x) for x in n] | |
2558 |
for n in repo.status(files=files, |
|
2574 | for n in repo.status(node1=node1, node2=node2, files=files, | |
|
2575 | match=matchfn, | |||
2559 | list_ignored=all or opts['ignored'], |
|
2576 | list_ignored=all or opts['ignored'], | |
2560 | list_clean=all or opts['clean'])] |
|
2577 | list_clean=all or opts['clean'])] | |
2561 |
|
2578 | |||
@@ -3101,6 +3118,7 b' table = {' | |||||
3101 | ('C', 'copies', None, _('show source of copied files')), |
|
3118 | ('C', 'copies', None, _('show source of copied files')), | |
3102 | ('0', 'print0', None, |
|
3119 | ('0', 'print0', None, | |
3103 | _('end filenames with NUL, for use with xargs')), |
|
3120 | _('end filenames with NUL, for use with xargs')), | |
|
3121 | ('', 'rev', [], _('show difference from revision')), | |||
3104 | ] + walkopts, |
|
3122 | ] + walkopts, | |
3105 | _('hg status [OPTION]... [FILE]...')), |
|
3123 | _('hg status [OPTION]... [FILE]...')), | |
3106 | "tag": |
|
3124 | "tag": |
@@ -191,7 +191,7 b' class hgweb(object):' | |||||
191 | parity = (start - end) & 1 |
|
191 | parity = (start - end) & 1 | |
192 | cl = self.repo.changelog |
|
192 | cl = self.repo.changelog | |
193 | l = [] # build a list in forward order for efficiency |
|
193 | l = [] # build a list in forward order for efficiency | |
194 | for i in range(start, end): |
|
194 | for i in xrange(start, end): | |
195 | ctx = self.repo.changectx(i) |
|
195 | ctx = self.repo.changectx(i) | |
196 | n = ctx.node() |
|
196 | n = ctx.node() | |
197 |
|
197 | |||
@@ -234,9 +234,9 b' class hgweb(object):' | |||||
234 | qw = query.lower().split() |
|
234 | qw = query.lower().split() | |
235 |
|
235 | |||
236 | def revgen(): |
|
236 | def revgen(): | |
237 | for i in range(cl.count() - 1, 0, -100): |
|
237 | for i in xrange(cl.count() - 1, 0, -100): | |
238 | l = [] |
|
238 | l = [] | |
239 | for j in range(max(0, i - 100), i): |
|
239 | for j in xrange(max(0, i - 100), i): | |
240 | ctx = self.repo.changectx(j) |
|
240 | ctx = self.repo.changectx(j) | |
241 | l.append(ctx) |
|
241 | l.append(ctx) | |
242 | l.reverse() |
|
242 | l.reverse() | |
@@ -322,7 +322,7 b' class hgweb(object):' | |||||
322 | l = [] |
|
322 | l = [] | |
323 | parity = (count - 1) & 1 |
|
323 | parity = (count - 1) & 1 | |
324 |
|
324 | |||
325 | for i in range(start, end): |
|
325 | for i in xrange(start, end): | |
326 | ctx = fctx.filectx(i) |
|
326 | ctx = fctx.filectx(i) | |
327 | n = fl.node(i) |
|
327 | n = fl.node(i) | |
328 |
|
328 | |||
@@ -531,7 +531,7 b' class hgweb(object):' | |||||
531 | parity = 0 |
|
531 | parity = 0 | |
532 | cl = self.repo.changelog |
|
532 | cl = self.repo.changelog | |
533 | l = [] # build a list in forward order for efficiency |
|
533 | l = [] # build a list in forward order for efficiency | |
534 | for i in range(start, end): |
|
534 | for i in xrange(start, end): | |
535 | n = cl.node(i) |
|
535 | n = cl.node(i) | |
536 | changes = cl.read(n) |
|
536 | changes = cl.read(n) | |
537 | hn = hex(n) |
|
537 | hn = hex(n) | |
@@ -629,9 +629,10 b' class hgweb(object):' | |||||
629 | yield '' |
|
629 | yield '' | |
630 |
|
630 | |||
631 | def footer(**map): |
|
631 | def footer(**map): | |
632 | yield self.t("footer", |
|
632 | yield self.t("footer", **map) | |
633 | motd=self.repo.ui.config("web", "motd", ""), |
|
633 | ||
634 | **map) |
|
634 | def motd(**map): | |
|
635 | yield self.repo.ui.config("web", "motd", "") | |||
635 |
|
636 | |||
636 | def expand_form(form): |
|
637 | def expand_form(form): | |
637 | shortcuts = { |
|
638 | shortcuts = { | |
@@ -762,6 +763,7 b' class hgweb(object):' | |||||
762 | "repo": self.reponame, |
|
763 | "repo": self.reponame, | |
763 | "header": header, |
|
764 | "header": header, | |
764 | "footer": footer, |
|
765 | "footer": footer, | |
|
766 | "motd": motd, | |||
765 | "rawfileheader": rawfileheader, |
|
767 | "rawfileheader": rawfileheader, | |
766 | "sessionvars": sessionvars |
|
768 | "sessionvars": sessionvars | |
767 | }) |
|
769 | }) |
@@ -67,7 +67,10 b' class hgwebdir(object):' | |||||
67 | yield header_file.read() |
|
67 | yield header_file.read() | |
68 |
|
68 | |||
69 | def footer(**map): |
|
69 | def footer(**map): | |
70 |
yield tmpl("footer", |
|
70 | yield tmpl("footer", **map) | |
|
71 | ||||
|
72 | def motd(**map): | |||
|
73 | yield self.motd | |||
71 |
|
74 | |||
72 | url = req.env['REQUEST_URI'].split('?')[0] |
|
75 | url = req.env['REQUEST_URI'].split('?')[0] | |
73 | if not url.endswith('/'): |
|
76 | if not url.endswith('/'): | |
@@ -80,6 +83,7 b' class hgwebdir(object):' | |||||
80 | tmpl = templater.templater(mapfile, templater.common_filters, |
|
83 | tmpl = templater.templater(mapfile, templater.common_filters, | |
81 | defaults={"header": header, |
|
84 | defaults={"header": header, | |
82 | "footer": footer, |
|
85 | "footer": footer, | |
|
86 | "motd": motd, | |||
83 | "url": url}) |
|
87 | "url": url}) | |
84 |
|
88 | |||
85 | def archivelist(ui, nodeid, url): |
|
89 | def archivelist(ui, nodeid, url): |
@@ -1137,7 +1137,7 b' class localrepository(repo.repository):' | |||||
1137 | reqcnt += 1 |
|
1137 | reqcnt += 1 | |
1138 | self.ui.debug(_("request %d: %s\n") % |
|
1138 | self.ui.debug(_("request %d: %s\n") % | |
1139 | (reqcnt, " ".join(map(short, r)))) |
|
1139 | (reqcnt, " ".join(map(short, r)))) | |
1140 | for p in range(0, len(r), 10): |
|
1140 | for p in xrange(0, len(r), 10): | |
1141 | for b in remote.branches(r[p:p+10]): |
|
1141 | for b in remote.branches(r[p:p+10]): | |
1142 | self.ui.debug(_("received %s:%s\n") % |
|
1142 | self.ui.debug(_("received %s:%s\n") % | |
1143 | (short(b[0]), short(b[1]))) |
|
1143 | (short(b[0]), short(b[1]))) | |
@@ -1757,7 +1757,7 b' class localrepository(repo.repository):' | |||||
1757 | self.hook("changegroup", node=hex(self.changelog.node(cor+1)), |
|
1757 | self.hook("changegroup", node=hex(self.changelog.node(cor+1)), | |
1758 | source=srctype, url=url) |
|
1758 | source=srctype, url=url) | |
1759 |
|
1759 | |||
1760 | for i in range(cor + 1, cnr + 1): |
|
1760 | for i in xrange(cor + 1, cnr + 1): | |
1761 | self.hook("incoming", node=hex(self.changelog.node(i)), |
|
1761 | self.hook("incoming", node=hex(self.changelog.node(i)), | |
1762 | source=srctype, url=url) |
|
1762 | source=srctype, url=url) | |
1763 |
|
1763 |
@@ -220,7 +220,7 b' def dogitpatch(patchname, gitpatches, cw' | |||||
220 | tmpfp = os.fdopen(fd, 'w') |
|
220 | tmpfp = os.fdopen(fd, 'w') | |
221 |
|
221 | |||
222 | try: |
|
222 | try: | |
223 | for i in range(len(gitpatches)): |
|
223 | for i in xrange(len(gitpatches)): | |
224 | p = gitpatches[i] |
|
224 | p = gitpatches[i] | |
225 | if not p.copymod and not p.binary: |
|
225 | if not p.copymod and not p.binary: | |
226 | continue |
|
226 | continue | |
@@ -266,14 +266,13 b' def dogitpatch(patchname, gitpatches, cw' | |||||
266 | tmpfp.close() |
|
266 | tmpfp.close() | |
267 | return patchname |
|
267 | return patchname | |
268 |
|
268 | |||
269 | def patch(patchname, ui, strip=1, cwd=None): |
|
269 | def patch(patchname, ui, strip=1, cwd=None, files={}): | |
270 | """apply the patch <patchname> to the working directory. |
|
270 | """apply the patch <patchname> to the working directory. | |
271 | a list of patched files is returned""" |
|
271 | a list of patched files is returned""" | |
272 |
|
272 | |||
273 | # helper function |
|
273 | # helper function | |
274 | def __patch(patchname): |
|
274 | def __patch(patchname): | |
275 | """patch and updates the files and fuzz variables""" |
|
275 | """patch and updates the files and fuzz variables""" | |
276 | files = {} |
|
|||
277 | fuzz = False |
|
276 | fuzz = False | |
278 |
|
277 | |||
279 | patcher = util.find_in_path('gpatch', os.environ.get('PATH', ''), |
|
278 | patcher = util.find_in_path('gpatch', os.environ.get('PATH', ''), | |
@@ -308,25 +307,24 b' def patch(patchname, ui, strip=1, cwd=No' | |||||
308 | if code: |
|
307 | if code: | |
309 | raise util.Abort(_("patch command failed: %s") % |
|
308 | raise util.Abort(_("patch command failed: %s") % | |
310 | util.explain_exit(code)[0]) |
|
309 | util.explain_exit(code)[0]) | |
311 |
return |
|
310 | return fuzz | |
312 |
|
311 | |||
313 | (dopatch, gitpatches) = readgitpatch(patchname) |
|
312 | (dopatch, gitpatches) = readgitpatch(patchname) | |
|
313 | for gp in gitpatches: | |||
|
314 | files[gp.path] = (gp.op, gp) | |||
314 |
|
315 | |||
315 |
|
|
316 | fuzz = False | |
316 | if dopatch: |
|
317 | if dopatch: | |
317 | if dopatch in ('filter', 'binary'): |
|
318 | if dopatch in ('filter', 'binary'): | |
318 | patchname = dogitpatch(patchname, gitpatches, cwd=cwd) |
|
319 | patchname = dogitpatch(patchname, gitpatches, cwd=cwd) | |
319 | try: |
|
320 | try: | |
320 | if dopatch != 'binary': |
|
321 | if dopatch != 'binary': | |
321 |
|
|
322 | fuzz = __patch(patchname) | |
322 | finally: |
|
323 | finally: | |
323 | if dopatch == 'filter': |
|
324 | if dopatch == 'filter': | |
324 | os.unlink(patchname) |
|
325 | os.unlink(patchname) | |
325 |
|
326 | |||
326 | for gp in gitpatches: |
|
327 | return fuzz | |
327 | files[gp.path] = (gp.op, gp) |
|
|||
328 |
|
||||
329 | return (files, fuzz) |
|
|||
330 |
|
328 | |||
331 | def diffopts(ui, opts={}): |
|
329 | def diffopts(ui, opts={}): | |
332 | return mdiff.diffopts( |
|
330 | return mdiff.diffopts( |
@@ -737,13 +737,9 b' class revlog(object):' | |||||
737 | c = [] |
|
737 | c = [] | |
738 | p = self.rev(node) |
|
738 | p = self.rev(node) | |
739 | for r in range(p + 1, self.count()): |
|
739 | for r in range(p + 1, self.count()): | |
740 |
|
|
740 | for pr in self.parentrevs(r): | |
741 | for pn in self.parents(n): |
|
741 | if pr == p: | |
742 | if pn == node: |
|
742 | c.append(self.node(r)) | |
743 | c.append(n) |
|
|||
744 | continue |
|
|||
745 | elif pn == nullid: |
|
|||
746 | continue |
|
|||
747 | return c |
|
743 | return c | |
748 |
|
744 | |||
749 | def _match(self, id): |
|
745 | def _match(self, id): |
@@ -310,6 +310,7 b' common_filters = {' | |||||
310 | "strip": lambda x: x.strip(), |
|
310 | "strip": lambda x: x.strip(), | |
311 | "urlescape": lambda x: urllib.quote(x), |
|
311 | "urlescape": lambda x: urllib.quote(x), | |
312 | "user": lambda x: util.shortuser(x), |
|
312 | "user": lambda x: util.shortuser(x), | |
|
313 | "stringescape": lambda x: x.encode('string_escape'), | |||
313 | } |
|
314 | } | |
314 |
|
315 | |||
315 | def templatepath(name=None): |
|
316 | def templatepath(name=None): | |
@@ -431,14 +432,15 b' class changeset_templater(object):' | |||||
431 | if endname in self.t: |
|
432 | if endname in self.t: | |
432 | yield self.t(endname, **args) |
|
433 | yield self.t(endname, **args) | |
433 |
|
434 | |||
434 | if brinfo: |
|
435 | def showbranches(**args): | |
435 | def showbranches(**args): |
|
436 | branch = changes[5].get("branch") | |
436 | if changenode in brinfo: |
|
437 | if branch: | |
437 |
|
|
438 | yield showlist('branch', [branch], plural='branches', **args) | |
438 | plural='branches', **args): |
|
439 | # add old style branches if requested | |
439 | yield x |
|
440 | if brinfo and changenode in brinfo: | |
440 | else: |
|
441 | for x in showlist('branch', brinfo[changenode], | |
441 | showbranches = '' |
|
442 | plural='branches', **args): | |
|
443 | yield x | |||
442 |
|
444 | |||
443 | if self.ui.debugflag: |
|
445 | if self.ui.debugflag: | |
444 | def showmanifest(**args): |
|
446 | def showmanifest(**args): | |
@@ -463,6 +465,14 b' class changeset_templater(object):' | |||||
463 | for x in showlist('tag', self.repo.nodetags(changenode), **args): |
|
465 | for x in showlist('tag', self.repo.nodetags(changenode), **args): | |
464 | yield x |
|
466 | yield x | |
465 |
|
467 | |||
|
468 | def showextras(**args): | |||
|
469 | extras = changes[5].items() | |||
|
470 | extras.sort() | |||
|
471 | for key, value in extras: | |||
|
472 | args = args.copy() | |||
|
473 | args.update(dict(key=key, value=value)) | |||
|
474 | yield self.t('extra', **args) | |||
|
475 | ||||
466 | if self.ui.debugflag: |
|
476 | if self.ui.debugflag: | |
467 | files = self.repo.status(log.parents(changenode)[0], changenode)[:3] |
|
477 | files = self.repo.status(log.parents(changenode)[0], changenode)[:3] | |
468 | def showfiles(**args): |
|
478 | def showfiles(**args): | |
@@ -498,6 +508,7 b' class changeset_templater(object):' | |||||
498 | 'parents': showparents, |
|
508 | 'parents': showparents, | |
499 | 'rev': rev, |
|
509 | 'rev': rev, | |
500 | 'tags': showtags, |
|
510 | 'tags': showtags, | |
|
511 | 'extras': showextras, | |||
501 | } |
|
512 | } | |
502 | props = props.copy() |
|
513 | props = props.copy() | |
503 | props.update(defprops) |
|
514 | props.update(defprops) |
@@ -111,7 +111,8 b' class ui(object):' | |||||
111 | try: |
|
111 | try: | |
112 | cdata.read(filename) |
|
112 | cdata.read(filename) | |
113 | except ConfigParser.ParsingError, inst: |
|
113 | except ConfigParser.ParsingError, inst: | |
114 |
raise util.Abort(_("failed to parse %s\n%s") % (f, |
|
114 | raise util.Abort(_("failed to parse %s\n%s") % (filename, | |
|
115 | inst)) | |||
115 |
|
116 | |||
116 | for section in sections: |
|
117 | for section in sections: | |
117 | if not cdata.has_section(section): |
|
118 | if not cdata.has_section(section): | |
@@ -226,21 +227,21 b' class ui(object):' | |||||
226 |
|
227 | |||
227 | Searched in this order: $HGUSER, [ui] section of hgrcs, $EMAIL |
|
228 | Searched in this order: $HGUSER, [ui] section of hgrcs, $EMAIL | |
228 | and stop searching if one of these is set. |
|
229 | and stop searching if one of these is set. | |
229 |
Abort if |
|
230 | Abort if no username is found, to force specifying the commit user | |
230 |
|
|
231 | with line option or repo hgrc. | |
231 | If not found, use ($LOGNAME or $USER or $LNAME or |
|
|||
232 | $USERNAME) +"@full.hostname". |
|
|||
233 | """ |
|
232 | """ | |
234 | user = os.environ.get("HGUSER") |
|
233 | user = os.environ.get("HGUSER") | |
235 | if user is None: |
|
234 | if user is None: | |
236 | user = self.config("ui", "username") |
|
235 | user = self.config("ui", "username") | |
237 | if user is None: |
|
236 | if user is None: | |
238 | user = os.environ.get("EMAIL") |
|
237 | user = os.environ.get("EMAIL") | |
239 |
if user |
|
238 | if not user: | |
240 | try: |
|
239 | self.status(_("Please choose a commit username to be recorded " | |
241 | user = '%s@%s' % (util.getuser(), socket.getfqdn()) |
|
240 | "in the changelog via\ncommand line option " | |
242 | except KeyError: |
|
241 | '(-u "First Last <email@example.com>"), in the\n' | |
243 | raise util.Abort(_("Please specify a username.")) |
|
242 | "configuration files (hgrc), or by setting the " | |
|
243 | "EMAIL environment variable.\n\n")) | |||
|
244 | raise util.Abort(_("No commit username specified!")) | |||
244 | return user |
|
245 | return user | |
245 |
|
246 | |||
246 | def shortuser(self, user): |
|
247 | def shortuser(self, user): |
@@ -519,20 +519,6 b' def is_win_9x():' | |||||
519 | except AttributeError: |
|
519 | except AttributeError: | |
520 | return os.name == 'nt' and 'command' in os.environ.get('comspec', '') |
|
520 | return os.name == 'nt' and 'command' in os.environ.get('comspec', '') | |
521 |
|
521 | |||
522 | getuser_fallback = None |
|
|||
523 |
|
||||
524 | def getuser(): |
|
|||
525 | '''return name of current user''' |
|
|||
526 | try: |
|
|||
527 | return getpass.getuser() |
|
|||
528 | except ImportError: |
|
|||
529 | # import of pwd will fail on windows - try fallback |
|
|||
530 | if getuser_fallback: |
|
|||
531 | return getuser_fallback() |
|
|||
532 | # raised if win32api not available |
|
|||
533 | raise Abort(_('user name not available - set USERNAME ' |
|
|||
534 | 'environment variable')) |
|
|||
535 |
|
||||
536 | # Platform specific variants |
|
522 | # Platform specific variants | |
537 | if os.name == 'nt': |
|
523 | if os.name == 'nt': | |
538 | demandload(globals(), "msvcrt") |
|
524 | demandload(globals(), "msvcrt") |
@@ -297,5 +297,3 b' class posixfile_nt(object):' | |||||
297 | win32file.SetEndOfFile(self.handle) |
|
297 | win32file.SetEndOfFile(self.handle) | |
298 | except pywintypes.error, err: |
|
298 | except pywintypes.error, err: | |
299 | raise WinIOError(err) |
|
299 | raise WinIOError(err) | |
300 |
|
||||
301 | getuser_fallback = win32api.GetUserName |
|
@@ -48,7 +48,7 b' def verify(repo):' | |||||
48 | repo.ui.status(_("checking changesets\n")) |
|
48 | repo.ui.status(_("checking changesets\n")) | |
49 | checksize(repo.changelog, "changelog") |
|
49 | checksize(repo.changelog, "changelog") | |
50 |
|
50 | |||
51 | for i in range(repo.changelog.count()): |
|
51 | for i in xrange(repo.changelog.count()): | |
52 | changesets += 1 |
|
52 | changesets += 1 | |
53 | n = repo.changelog.node(i) |
|
53 | n = repo.changelog.node(i) | |
54 | l = repo.changelog.linkrev(n) |
|
54 | l = repo.changelog.linkrev(n) | |
@@ -81,7 +81,7 b' def verify(repo):' | |||||
81 | checkversion(repo.manifest, "manifest") |
|
81 | checkversion(repo.manifest, "manifest") | |
82 | checksize(repo.manifest, "manifest") |
|
82 | checksize(repo.manifest, "manifest") | |
83 |
|
83 | |||
84 | for i in range(repo.manifest.count()): |
|
84 | for i in xrange(repo.manifest.count()): | |
85 | n = repo.manifest.node(i) |
|
85 | n = repo.manifest.node(i) | |
86 | l = repo.manifest.linkrev(n) |
|
86 | l = repo.manifest.linkrev(n) | |
87 |
|
87 | |||
@@ -142,7 +142,7 b' def verify(repo):' | |||||
142 |
|
142 | |||
143 | nodes = {nullid: 1} |
|
143 | nodes = {nullid: 1} | |
144 | seen = {} |
|
144 | seen = {} | |
145 | for i in range(fl.count()): |
|
145 | for i in xrange(fl.count()): | |
146 | revisions += 1 |
|
146 | revisions += 1 | |
147 | n = fl.node(i) |
|
147 | n = fl.node(i) | |
148 |
|
148 |
@@ -1,5 +1,5 b'' | |||||
1 | #header# |
|
1 | #header# | |
2 |
<title> |
|
2 | <title>{repo|escape}: changeset {rev}:{node|short}</title> | |
3 | <link rel="alternate" type="application/rss+xml" |
|
3 | <link rel="alternate" type="application/rss+xml" | |
4 | href="{url}rss-log" title="RSS feed for #repo|escape#"> |
|
4 | href="{url}rss-log" title="RSS feed for #repo|escape#"> | |
5 | </head> |
|
5 | </head> | |
@@ -20,7 +20,7 b'' | |||||
20 | <table cellspacing="0"> |
|
20 | <table cellspacing="0"> | |
21 | <tr><td>author</td><td>#author|obfuscate#</td></tr> |
|
21 | <tr><td>author</td><td>#author|obfuscate#</td></tr> | |
22 | <tr><td></td><td>#date|date# (#date|age# ago)</td></tr> |
|
22 | <tr><td></td><td>#date|date# (#date|age# ago)</td></tr> | |
23 |
<tr><td>changeset</td><td style="font-family:monospace"> |
|
23 | <tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr> | |
24 | <tr><td>manifest</td><td style="font-family:monospace"><a class="list" href="{url}file/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr> |
|
24 | <tr><td>manifest</td><td style="font-family:monospace"><a class="list" href="{url}file/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr> | |
25 | #parent%changesetparent# |
|
25 | #parent%changesetparent# | |
26 | #child%changesetchild# |
|
26 | #child%changesetchild# |
@@ -1,5 +1,5 b'' | |||||
1 | #header# |
|
1 | #header# | |
2 |
<title> |
|
2 | <title>{repo|escape}: {file|escape}@{node|short} (annotated)</title> | |
3 | <link rel="alternate" type="application/rss+xml" |
|
3 | <link rel="alternate" type="application/rss+xml" | |
4 | href="{url}rss-log" title="RSS feed for #repo|escape#"> |
|
4 | href="{url}rss-log" title="RSS feed for #repo|escape#"> | |
5 | </head> |
|
5 | </head> |
@@ -1,5 +1,5 b'' | |||||
1 | #header# |
|
1 | #header# | |
2 |
<title> |
|
2 | <title>{repo|escape}: {file|escape}@{node|short}</title> | |
3 | <link rel="alternate" type="application/rss+xml" |
|
3 | <link rel="alternate" type="application/rss+xml" | |
4 | href="{url}rss-log" title="RSS feed for #repo|escape#"> |
|
4 | href="{url}rss-log" title="RSS feed for #repo|escape#"> | |
5 | </head> |
|
5 | </head> |
@@ -1,6 +1,8 b'' | |||||
1 | <div class="page_footer"> |
|
1 | <div class="page_footer"> | |
2 | <div class="page_footer_text">#repo|escape#</div> |
|
2 | <div class="page_footer_text">#repo|escape#</div> | |
3 | <a class="rss_logo" href="#url#rss-log">RSS</a> |
|
3 | <a class="rss_logo" href="#url#rss-log">RSS</a> | |
|
4 | <br /> | |||
|
5 | #motd# | |||
4 | </div> |
|
6 | </div> | |
5 | </body> |
|
7 | </body> | |
6 | </html> |
|
8 | </html> |
@@ -18,6 +18,7 b'' | |||||
18 | #entries%indexentry# |
|
18 | #entries%indexentry# | |
19 | </table> |
|
19 | </table> | |
20 | <div class="page_footer"> |
|
20 | <div class="page_footer"> | |
|
21 | #motd# | |||
21 | </div> |
|
22 | </div> | |
22 | </body> |
|
23 | </body> | |
23 | </html> |
|
24 | </html> |
@@ -28,15 +28,15 b' difflineminus = \'<div style="color:#cc00' | |||||
28 | difflineat = '<div style="color:#990099;">#line|escape#</div>' |
|
28 | difflineat = '<div style="color:#990099;">#line|escape#</div>' | |
29 | diffline = '<div>#line|escape#</div>' |
|
29 | diffline = '<div>#line|escape#</div>' | |
30 | changelogparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="#url#rev/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr>' |
|
30 | changelogparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="#url#rev/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr>' | |
31 |
changesetparent = '<tr><td>parent</td><td style="font-family:monospace"><a class="list" href=" |
|
31 | changesetparent = '<tr><td>parent {rev}</td><td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>' | |
32 | filerevparent = '<tr><td class="metatag">parent:</td><td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a></td></tr>' |
|
32 | filerevparent = '<tr><td class="metatag">parent {rev}:</td><td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a></td></tr>' | |
33 | filerename = '{file|escape}@' |
|
33 | filerename = '{file|escape}@' | |
34 | filelogrename = '| <a href="{url}file/#node|short#/#file|urlescape#{sessionvars%urlparameter}">base</a>' |
|
34 | filelogrename = '| <a href="{url}file/#node|short#/#file|urlescape#{sessionvars%urlparameter}">base</a>' | |
35 | fileannotateparent = '<tr><td class="metatag">parent:</td><td><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a></td></tr>' |
|
35 | fileannotateparent = '<tr><td class="metatag">parent {rev}:</td><td><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a></td></tr>' | |
36 | changelogchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="{url}rev/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr>' |
|
36 | changelogchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="{url}rev/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr>' | |
37 |
changesetchild = '<tr><td>child</td><td style="font-family:monospace"><a class="list" href="{url}rev/ |
|
37 | changesetchild = '<tr><td>child {rev}</td><td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>' | |
38 |
filerevchild = '<tr><td class="metatag">child:</td><td><a href="{url}file/{node|short}/ |
|
38 | filerevchild = '<tr><td class="metatag">child {rev}:</td><td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td></tr>' | |
39 |
fileannotatechild = '<tr><td class="metatag">child:</td><td><a href="{url}annotate/{node|short}/ |
|
39 | fileannotatechild = '<tr><td class="metatag">child {rev}:</td><td><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td></tr>' | |
40 | tags = tags.tmpl |
|
40 | tags = tags.tmpl | |
41 | tagentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>#tag|escape#</b></a></td><td class="link"><a href="{url}rev/#node|short#{sessionvars%urlparameter}">changeset</a> | <a href="{url}log/#node|short#{sessionvars%urlparameter}">changelog</a> | <a href="{url}file/#node|short#{sessionvars%urlparameter}">manifest</a></td></tr>' |
|
41 | tagentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>#tag|escape#</b></a></td><td class="link"><a href="{url}rev/#node|short#{sessionvars%urlparameter}">changeset</a> | <a href="{url}log/#node|short#{sessionvars%urlparameter}">changelog</a> | <a href="{url}file/#node|short#{sessionvars%urlparameter}">manifest</a></td></tr>' | |
42 | diffblock = '<pre>#lines#</pre>' |
|
42 | diffblock = '<pre>#lines#</pre>' |
@@ -1,6 +1,10 b'' | |||||
1 | changeset = 'changeset: {rev}:{node|short}\n{tags}{short_parents}user: {author}\ndate: {date|date}\nsummary: {desc|firstline}\n\n' |
|
1 | changeset = 'changeset: {rev}:{node|short}\n{branches}{tags}{short_parents}user: {author}\ndate: {date|date}\nsummary: {desc|firstline}\n\n' | |
2 | changeset_quiet = '{rev}:{node|short}\n' |
|
2 | changeset_quiet = '{rev}:{node|short}\n' | |
3 |
changeset_verbose = 'changeset: {rev}:{node}\n{tags}{parents}{manifest}user: {author}\ndate: {date|date}\n |
|
3 | changeset_verbose = 'changeset: {rev}:{node|short}\n{branches}{tags}{parents}{manifest}user: {author}\ndate: {date|date}\n{files}{file_adds}{file_dels}{file_copies}description:\n{desc|strip}\n\n\n' | |
|
4 | changeset_debug = 'changeset: {rev}:{node}\n{branches}{tags}{parents}{manifest}user: {author}\ndate: {date|date}\n{files}{file_adds}{file_dels}{file_copies}{extras}description:\n{desc|strip}\n\n\n' | |||
|
5 | start_files = 'files: ' | |||
|
6 | file = ' {file}' | |||
|
7 | end_files = '\n' | |||
4 | start_file_adds = 'files+: ' |
|
8 | start_file_adds = 'files+: ' | |
5 | file_add = ' {file_add}' |
|
9 | file_add = ' {file_add}' | |
6 | end_file_adds = '\n' |
|
10 | end_file_adds = '\n' | |
@@ -13,4 +17,6 b" end_file_copies = '\\n'" | |||||
13 | short_parent = 'parent: {rev}:{node|short}\n' |
|
17 | short_parent = 'parent: {rev}:{node|short}\n' | |
14 | parent = 'parent: {rev}:{node}\n' |
|
18 | parent = 'parent: {rev}:{node}\n' | |
15 | manifest = 'manifest: {rev}:{node}\n' |
|
19 | manifest = 'manifest: {rev}:{node}\n' | |
|
20 | branch = 'branch: {branch}\n' | |||
16 | tag = 'tag: {tag}\n' |
|
21 | tag = 'tag: {tag}\n' | |
|
22 | extra = 'extra: {key}={value|stringescape}\n' |
@@ -7,7 +7,7 b' div.page_header a:hover { color:#880000;' | |||||
7 | div.page_nav { padding:8px; } |
|
7 | div.page_nav { padding:8px; } | |
8 | div.page_nav a:visited { color:#0000cc; } |
|
8 | div.page_nav a:visited { color:#0000cc; } | |
9 | div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px} |
|
9 | div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px} | |
10 |
div.page_footer { |
|
10 | div.page_footer { padding:4px 8px; background-color: #d9d8d1; } | |
11 | div.page_footer_text { float:left; color:#555555; font-style:italic; } |
|
11 | div.page_footer_text { float:left; color:#555555; font-style:italic; } | |
12 | div.page_body { padding:8px; } |
|
12 | div.page_body { padding:8px; } | |
13 | div.title, a.title { |
|
13 | div.title, a.title { |
@@ -9,7 +9,7 b' do_push()' | |||||
9 | echo 'hgrc = """' |
|
9 | echo 'hgrc = """' | |
10 | sed -e 1,2d b/.hg/hgrc |
|
10 | sed -e 1,2d b/.hg/hgrc | |
11 | echo '"""' |
|
11 | echo '"""' | |
12 |
if |
|
12 | if test -f acl.config; then | |
13 | echo 'acl.config = """' |
|
13 | echo 'acl.config = """' | |
14 | cat acl.config |
|
14 | cat acl.config | |
15 | echo '"""' |
|
15 | echo '"""' |
@@ -2,7 +2,7 b'' | |||||
2 |
|
2 | |||
3 | hg clone http://localhost:20059/ copy |
|
3 | hg clone http://localhost:20059/ copy | |
4 | echo $? |
|
4 | echo $? | |
5 |
test - |
|
5 | test -d copy || echo copy: No such file or directory | |
6 |
|
6 | |||
7 | cat > dumb.py <<EOF |
|
7 | cat > dumb.py <<EOF | |
8 | import BaseHTTPServer, SimpleHTTPServer, signal |
|
8 | import BaseHTTPServer, SimpleHTTPServer, signal |
@@ -17,6 +17,8 b' hg add c' | |||||
17 | hg commit -m 'no person' -d '1200000 0' -u 'other@place' |
|
17 | hg commit -m 'no person' -d '1200000 0' -u 'other@place' | |
18 | echo c >> c |
|
18 | echo c >> c | |
19 | hg commit -m 'no user, no domain' -d '1300000 0' -u 'person' |
|
19 | hg commit -m 'no user, no domain' -d '1300000 0' -u 'person' | |
|
20 | echo foo > .hg/branch | |||
|
21 | hg commit -m 'new branch' -d '1400000 0' -u 'person' | |||
20 |
|
22 | |||
21 | # make sure user/global hgrc does not affect tests |
|
23 | # make sure user/global hgrc does not affect tests | |
22 | echo '[ui]' > .hg/hgrc |
|
24 | echo '[ui]' > .hg/hgrc | |
@@ -24,12 +26,15 b" echo 'logtemplate =' >> .hg/hgrc" | |||||
24 | echo 'style =' >> .hg/hgrc |
|
26 | echo 'style =' >> .hg/hgrc | |
25 |
|
27 | |||
26 | echo '# default style is like normal output' |
|
28 | echo '# default style is like normal output' | |
|
29 | echo '# normal' | |||
27 | hg log > log.out |
|
30 | hg log > log.out | |
28 | hg log --style default > style.out |
|
31 | hg log --style default > style.out | |
29 | diff log.out style.out |
|
32 | diff log.out style.out | |
|
33 | echo '# verbose' | |||
30 | hg log -v > log.out |
|
34 | hg log -v > log.out | |
31 | hg log -v --style default > style.out |
|
35 | hg log -v --style default > style.out | |
32 | diff log.out style.out |
|
36 | diff log.out style.out | |
|
37 | echo '# debug' | |||
33 | hg log --debug > log.out |
|
38 | hg log --debug > log.out | |
34 | hg log --debug --style default > style.out |
|
39 | hg log --debug --style default > style.out | |
35 | diff log.out style.out |
|
40 | diff log.out style.out |
@@ -1,28 +1,12 b'' | |||||
1 | # default style is like normal output |
|
1 | # default style is like normal output | |
2 | 1c1 |
|
2 | # normal | |
3 | < changeset: 3:10e46f2dcbf4 |
|
3 | # verbose | |
4 | --- |
|
4 | # debug | |
5 | > changeset: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 |
|
|||
6 | 10c10 |
|
|||
7 | < changeset: 2:97054abb4ab8 |
|
|||
8 | --- |
|
|||
9 | > changeset: 2:97054abb4ab824450e9164180baf491ae0078465 |
|
|||
10 | 18c18 |
|
|||
11 | < changeset: 1:b608e9d1a3f0 |
|
|||
12 | --- |
|
|||
13 | > changeset: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 |
|
|||
14 | 29c29 |
|
|||
15 | < changeset: 0:1e4e1b8f71e0 |
|
|||
16 | --- |
|
|||
17 | > changeset: 0:1e4e1b8f71e05681d422154f5421e385fec3454f |
|
|||
18 | 18a19 |
|
|||
19 | > files: |
|
|||
20 | 29a31 |
|
|||
21 | > files: |
|
|||
22 | 43a46 |
|
|||
23 | > files: |
|
|||
24 | # compact style works |
|
5 | # compact style works | |
25 |
|
|
6 | 4[tip] 32a18f097fcc 1970-01-17 04:53 +0000 person | |
|
7 | new branch | |||
|
8 | ||||
|
9 | 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person | |||
26 | no user, no domain |
|
10 | no user, no domain | |
27 |
|
11 | |||
28 | 2 97054abb4ab8 1970-01-14 21:20 +0000 other |
|
12 | 2 97054abb4ab8 1970-01-14 21:20 +0000 other | |
@@ -34,7 +18,10 b' 1 b608e9d1a3f0 1970-01-13 17:33 +000' | |||||
34 | 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user |
|
18 | 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user | |
35 | line 1 |
|
19 | line 1 | |
36 |
|
20 | |||
37 |
|
|
21 | 4[tip] 32a18f097fcc 1970-01-17 04:53 +0000 person | |
|
22 | new branch | |||
|
23 | ||||
|
24 | 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person | |||
38 | no user, no domain |
|
25 | no user, no domain | |
39 |
|
26 | |||
40 | 2 97054abb4ab8 1970-01-14 21:20 +0000 other |
|
27 | 2 97054abb4ab8 1970-01-14 21:20 +0000 other | |
@@ -46,7 +33,10 b' 1 b608e9d1a3f0 1970-01-13 17:33 +000' | |||||
46 | 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user |
|
33 | 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user | |
47 | line 1 |
|
34 | line 1 | |
48 |
|
35 | |||
49 |
|
|
36 | 4[tip]:3,-1 32a18f097fcc 1970-01-17 04:53 +0000 person | |
|
37 | new branch | |||
|
38 | ||||
|
39 | 3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person | |||
50 | no user, no domain |
|
40 | no user, no domain | |
51 |
|
41 | |||
52 | 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other |
|
42 | 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other | |
@@ -67,21 +57,28 b" abort: ./t: no key named 'changeset'" | |||||
67 | # error if include fails |
|
57 | # error if include fails | |
68 | abort: template file ./q: Permission denied |
|
58 | abort: template file ./q: Permission denied | |
69 | # include works |
|
59 | # include works | |
|
60 | 4 | |||
70 | 3 |
|
61 | 3 | |
71 | 2 |
|
62 | 2 | |
72 | 1 |
|
63 | 1 | |
73 | 0 |
|
64 | 0 | |
74 | # ui.style works |
|
65 | # ui.style works | |
|
66 | 4 | |||
75 | 3 |
|
67 | 3 | |
76 | 2 |
|
68 | 2 | |
77 | 1 |
|
69 | 1 | |
78 | 0 |
|
70 | 0 | |
79 | # issue338 |
|
71 | # issue338 | |
|
72 | 1970-01-17 person <person> | |||
|
73 | ||||
|
74 | * new branch | |||
|
75 | [32a18f097fcc] [tip] | |||
|
76 | ||||
80 | 1970-01-16 person <person> |
|
77 | 1970-01-16 person <person> | |
81 |
|
78 | |||
82 | * c: |
|
79 | * c: | |
83 | no user, no domain |
|
80 | no user, no domain | |
84 |
[10e46f2dcbf4] |
|
81 | [10e46f2dcbf4] | |
85 |
|
82 | |||
86 | 1970-01-14 other <other@place> |
|
83 | 1970-01-14 other <other@place> | |
87 |
|
84 | |||
@@ -105,41 +102,51 b' 1970-01-12 User Name <user@hostname>' | |||||
105 |
|
102 | |||
106 | # keys work |
|
103 | # keys work | |
107 | author: person |
|
104 | author: person | |
|
105 | author: person | |||
108 | author: other@place |
|
106 | author: other@place | |
109 | author: A. N. Other <other@place> |
|
107 | author: A. N. Other <other@place> | |
110 | author: User Name <user@hostname> |
|
108 | author: User Name <user@hostname> | |
111 | author--verbose: person |
|
109 | author--verbose: person | |
|
110 | author--verbose: person | |||
112 | author--verbose: other@place |
|
111 | author--verbose: other@place | |
113 | author--verbose: A. N. Other <other@place> |
|
112 | author--verbose: A. N. Other <other@place> | |
114 | author--verbose: User Name <user@hostname> |
|
113 | author--verbose: User Name <user@hostname> | |
115 | author--debug: person |
|
114 | author--debug: person | |
|
115 | author--debug: person | |||
116 | author--debug: other@place |
|
116 | author--debug: other@place | |
117 | author--debug: A. N. Other <other@place> |
|
117 | author--debug: A. N. Other <other@place> | |
118 | author--debug: User Name <user@hostname> |
|
118 | author--debug: User Name <user@hostname> | |
|
119 | branches: foo | |||
119 | branches: |
|
120 | branches: | |
120 | branches: |
|
121 | branches: | |
121 | branches: |
|
122 | branches: | |
122 | branches: |
|
123 | branches: | |
|
124 | branches--verbose: foo | |||
123 | branches--verbose: |
|
125 | branches--verbose: | |
124 | branches--verbose: |
|
126 | branches--verbose: | |
125 | branches--verbose: |
|
127 | branches--verbose: | |
126 | branches--verbose: |
|
128 | branches--verbose: | |
|
129 | branches--debug: foo | |||
127 | branches--debug: |
|
130 | branches--debug: | |
128 | branches--debug: |
|
131 | branches--debug: | |
129 | branches--debug: |
|
132 | branches--debug: | |
130 | branches--debug: |
|
133 | branches--debug: | |
|
134 | date: 1400000.00 | |||
131 | date: 1300000.00 |
|
135 | date: 1300000.00 | |
132 | date: 1200000.00 |
|
136 | date: 1200000.00 | |
133 | date: 1100000.00 |
|
137 | date: 1100000.00 | |
134 | date: 1000000.00 |
|
138 | date: 1000000.00 | |
|
139 | date--verbose: 1400000.00 | |||
135 | date--verbose: 1300000.00 |
|
140 | date--verbose: 1300000.00 | |
136 | date--verbose: 1200000.00 |
|
141 | date--verbose: 1200000.00 | |
137 | date--verbose: 1100000.00 |
|
142 | date--verbose: 1100000.00 | |
138 | date--verbose: 1000000.00 |
|
143 | date--verbose: 1000000.00 | |
|
144 | date--debug: 1400000.00 | |||
139 | date--debug: 1300000.00 |
|
145 | date--debug: 1300000.00 | |
140 | date--debug: 1200000.00 |
|
146 | date--debug: 1200000.00 | |
141 | date--debug: 1100000.00 |
|
147 | date--debug: 1100000.00 | |
142 | date--debug: 1000000.00 |
|
148 | date--debug: 1000000.00 | |
|
149 | desc: new branch | |||
143 | desc: no user, no domain |
|
150 | desc: no user, no domain | |
144 | desc: no person |
|
151 | desc: no person | |
145 | desc: other 1 |
|
152 | desc: other 1 | |
@@ -148,6 +155,7 b' other 2' | |||||
148 | other 3 |
|
155 | other 3 | |
149 | desc: line 1 |
|
156 | desc: line 1 | |
150 | line 2 |
|
157 | line 2 | |
|
158 | desc--verbose: new branch | |||
151 | desc--verbose: no user, no domain |
|
159 | desc--verbose: no user, no domain | |
152 | desc--verbose: no person |
|
160 | desc--verbose: no person | |
153 | desc--verbose: other 1 |
|
161 | desc--verbose: other 1 | |
@@ -156,6 +164,7 b' other 2' | |||||
156 | other 3 |
|
164 | other 3 | |
157 | desc--verbose: line 1 |
|
165 | desc--verbose: line 1 | |
158 | line 2 |
|
166 | line 2 | |
|
167 | desc--debug: new branch | |||
159 | desc--debug: no user, no domain |
|
168 | desc--debug: no user, no domain | |
160 | desc--debug: no person |
|
169 | desc--debug: no person | |
161 | desc--debug: other 1 |
|
170 | desc--debug: other 1 | |
@@ -168,10 +177,13 b' file_adds:' | |||||
168 | file_adds: |
|
177 | file_adds: | |
169 | file_adds: |
|
178 | file_adds: | |
170 | file_adds: |
|
179 | file_adds: | |
|
180 | file_adds: | |||
171 | file_adds--verbose: |
|
181 | file_adds--verbose: | |
172 | file_adds--verbose: |
|
182 | file_adds--verbose: | |
173 | file_adds--verbose: |
|
183 | file_adds--verbose: | |
174 | file_adds--verbose: |
|
184 | file_adds--verbose: | |
|
185 | file_adds--verbose: | |||
|
186 | file_adds--debug: | |||
175 | file_adds--debug: |
|
187 | file_adds--debug: | |
176 | file_adds--debug: c |
|
188 | file_adds--debug: c | |
177 | file_adds--debug: b |
|
189 | file_adds--debug: b | |
@@ -180,6 +192,8 b' file_dels:' | |||||
180 | file_dels: |
|
192 | file_dels: | |
181 | file_dels: |
|
193 | file_dels: | |
182 | file_dels: |
|
194 | file_dels: | |
|
195 | file_dels: | |||
|
196 | file_dels--verbose: | |||
183 | file_dels--verbose: |
|
197 | file_dels--verbose: | |
184 | file_dels--verbose: |
|
198 | file_dels--verbose: | |
185 | file_dels--verbose: |
|
199 | file_dels--verbose: | |
@@ -188,14 +202,18 b' file_dels--debug:' | |||||
188 | file_dels--debug: |
|
202 | file_dels--debug: | |
189 | file_dels--debug: |
|
203 | file_dels--debug: | |
190 | file_dels--debug: |
|
204 | file_dels--debug: | |
|
205 | file_dels--debug: | |||
|
206 | files: | |||
191 | files: c |
|
207 | files: c | |
192 | files: c |
|
208 | files: c | |
193 | files: b |
|
209 | files: b | |
194 | files: a |
|
210 | files: a | |
|
211 | files--verbose: | |||
195 | files--verbose: c |
|
212 | files--verbose: c | |
196 | files--verbose: c |
|
213 | files--verbose: c | |
197 | files--verbose: b |
|
214 | files--verbose: b | |
198 | files--verbose: a |
|
215 | files--verbose: a | |
|
216 | files--debug: | |||
199 | files--debug: c |
|
217 | files--debug: c | |
200 | files--debug: |
|
218 | files--debug: | |
201 | files--debug: |
|
219 | files--debug: | |
@@ -204,22 +222,28 b' manifest:' | |||||
204 | manifest: |
|
222 | manifest: | |
205 | manifest: |
|
223 | manifest: | |
206 | manifest: |
|
224 | manifest: | |
|
225 | manifest: | |||
207 | manifest--verbose: |
|
226 | manifest--verbose: | |
208 | manifest--verbose: |
|
227 | manifest--verbose: | |
209 | manifest--verbose: |
|
228 | manifest--verbose: | |
210 | manifest--verbose: |
|
229 | manifest--verbose: | |
|
230 | manifest--verbose: | |||
|
231 | manifest--debug: 4:90ae8dda64e1 | |||
211 | manifest--debug: 3:cb5a1327723b |
|
232 | manifest--debug: 3:cb5a1327723b | |
212 | manifest--debug: 2:6e0e82995c35 |
|
233 | manifest--debug: 2:6e0e82995c35 | |
213 | manifest--debug: 1:4e8d705b1e53 |
|
234 | manifest--debug: 1:4e8d705b1e53 | |
214 | manifest--debug: 0:a0c8bcbbb45c |
|
235 | manifest--debug: 0:a0c8bcbbb45c | |
|
236 | node: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4 | |||
215 | node: 10e46f2dcbf4823578cf180f33ecf0b957964c47 |
|
237 | node: 10e46f2dcbf4823578cf180f33ecf0b957964c47 | |
216 | node: 97054abb4ab824450e9164180baf491ae0078465 |
|
238 | node: 97054abb4ab824450e9164180baf491ae0078465 | |
217 | node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965 |
|
239 | node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965 | |
218 | node: 1e4e1b8f71e05681d422154f5421e385fec3454f |
|
240 | node: 1e4e1b8f71e05681d422154f5421e385fec3454f | |
|
241 | node--verbose: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4 | |||
219 | node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47 |
|
242 | node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47 | |
220 | node--verbose: 97054abb4ab824450e9164180baf491ae0078465 |
|
243 | node--verbose: 97054abb4ab824450e9164180baf491ae0078465 | |
221 | node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965 |
|
244 | node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965 | |
222 | node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f |
|
245 | node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f | |
|
246 | node--debug: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4 | |||
223 | node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47 |
|
247 | node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47 | |
224 | node--debug: 97054abb4ab824450e9164180baf491ae0078465 |
|
248 | node--debug: 97054abb4ab824450e9164180baf491ae0078465 | |
225 | node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965 |
|
249 | node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965 | |
@@ -228,22 +252,28 b' parents:' | |||||
228 | parents: |
|
252 | parents: | |
229 | parents: |
|
253 | parents: | |
230 | parents: |
|
254 | parents: | |
|
255 | parents: | |||
231 | parents--verbose: |
|
256 | parents--verbose: | |
232 | parents--verbose: |
|
257 | parents--verbose: | |
233 | parents--verbose: |
|
258 | parents--verbose: | |
234 | parents--verbose: |
|
259 | parents--verbose: | |
|
260 | parents--verbose: | |||
|
261 | parents--debug: 3:10e46f2dcbf4 -1:000000000000 | |||
235 | parents--debug: 2:97054abb4ab8 -1:000000000000 |
|
262 | parents--debug: 2:97054abb4ab8 -1:000000000000 | |
236 | parents--debug: 1:b608e9d1a3f0 -1:000000000000 |
|
263 | parents--debug: 1:b608e9d1a3f0 -1:000000000000 | |
237 | parents--debug: 0:1e4e1b8f71e0 -1:000000000000 |
|
264 | parents--debug: 0:1e4e1b8f71e0 -1:000000000000 | |
238 | parents--debug: -1:000000000000 -1:000000000000 |
|
265 | parents--debug: -1:000000000000 -1:000000000000 | |
|
266 | rev: 4 | |||
239 | rev: 3 |
|
267 | rev: 3 | |
240 | rev: 2 |
|
268 | rev: 2 | |
241 | rev: 1 |
|
269 | rev: 1 | |
242 | rev: 0 |
|
270 | rev: 0 | |
|
271 | rev--verbose: 4 | |||
243 | rev--verbose: 3 |
|
272 | rev--verbose: 3 | |
244 | rev--verbose: 2 |
|
273 | rev--verbose: 2 | |
245 | rev--verbose: 1 |
|
274 | rev--verbose: 1 | |
246 | rev--verbose: 0 |
|
275 | rev--verbose: 0 | |
|
276 | rev--debug: 4 | |||
247 | rev--debug: 3 |
|
277 | rev--debug: 3 | |
248 | rev--debug: 2 |
|
278 | rev--debug: 2 | |
249 | rev--debug: 1 |
|
279 | rev--debug: 1 | |
@@ -252,43 +282,54 b' tags: tip' | |||||
252 | tags: |
|
282 | tags: | |
253 | tags: |
|
283 | tags: | |
254 | tags: |
|
284 | tags: | |
|
285 | tags: | |||
255 | tags--verbose: tip |
|
286 | tags--verbose: tip | |
256 | tags--verbose: |
|
287 | tags--verbose: | |
257 | tags--verbose: |
|
288 | tags--verbose: | |
258 | tags--verbose: |
|
289 | tags--verbose: | |
|
290 | tags--verbose: | |||
259 | tags--debug: tip |
|
291 | tags--debug: tip | |
260 | tags--debug: |
|
292 | tags--debug: | |
261 | tags--debug: |
|
293 | tags--debug: | |
262 | tags--debug: |
|
294 | tags--debug: | |
|
295 | tags--debug: | |||
263 | # filters work |
|
296 | # filters work | |
264 |
|
297 | |||
|
298 | ||||
265 | place |
|
299 | place | |
266 | place |
|
300 | place | |
267 | hostname |
|
301 | hostname | |
268 | person |
|
302 | person | |
|
303 | person | |||
269 | other |
|
304 | other | |
270 | A. N. Other |
|
305 | A. N. Other | |
271 | User Name |
|
306 | User Name | |
272 | person |
|
307 | person | |
|
308 | person | |||
273 | other |
|
309 | other | |
274 | other |
|
310 | other | |
275 | user |
|
311 | user | |
|
312 | Sat Jan 17 04:53:20 1970 +0000 | |||
276 | Fri Jan 16 01:06:40 1970 +0000 |
|
313 | Fri Jan 16 01:06:40 1970 +0000 | |
277 | Wed Jan 14 21:20:00 1970 +0000 |
|
314 | Wed Jan 14 21:20:00 1970 +0000 | |
278 | Tue Jan 13 17:33:20 1970 +0000 |
|
315 | Tue Jan 13 17:33:20 1970 +0000 | |
279 | Mon Jan 12 13:46:40 1970 +0000 |
|
316 | Mon Jan 12 13:46:40 1970 +0000 | |
|
317 | 1970-01-17 04:53 +0000 | |||
280 | 1970-01-16 01:06 +0000 |
|
318 | 1970-01-16 01:06 +0000 | |
281 | 1970-01-14 21:20 +0000 |
|
319 | 1970-01-14 21:20 +0000 | |
282 | 1970-01-13 17:33 +0000 |
|
320 | 1970-01-13 17:33 +0000 | |
283 | 1970-01-12 13:46 +0000 |
|
321 | 1970-01-12 13:46 +0000 | |
|
322 | Sat, 17 Jan 1970 04:53:20 +0000 | |||
284 | Fri, 16 Jan 1970 01:06:40 +0000 |
|
323 | Fri, 16 Jan 1970 01:06:40 +0000 | |
285 | Wed, 14 Jan 1970 21:20:00 +0000 |
|
324 | Wed, 14 Jan 1970 21:20:00 +0000 | |
286 | Tue, 13 Jan 1970 17:33:20 +0000 |
|
325 | Tue, 13 Jan 1970 17:33:20 +0000 | |
287 | Mon, 12 Jan 1970 13:46:40 +0000 |
|
326 | Mon, 12 Jan 1970 13:46:40 +0000 | |
|
327 | new branch | |||
288 | no user, no domain |
|
328 | no user, no domain | |
289 | no person |
|
329 | no person | |
290 | other 1 |
|
330 | other 1 | |
291 | line 1 |
|
331 | line 1 | |
|
332 | 32a18f097fcc | |||
292 | 10e46f2dcbf4 |
|
333 | 10e46f2dcbf4 | |
293 | 97054abb4ab8 |
|
334 | 97054abb4ab8 | |
294 | b608e9d1a3f0 |
|
335 | b608e9d1a3f0 |
@@ -10,3 +10,17 b' touch asdf' | |||||
10 | hg add asdf |
|
10 | hg add asdf | |
11 | hg commit -d '1000000 0' -m commit-1 |
|
11 | hg commit -d '1000000 0' -m commit-1 | |
12 | hg tip |
|
12 | hg tip | |
|
13 | ||||
|
14 | unset EMAIL | |||
|
15 | echo 1 > asdf | |||
|
16 | hg commit -d '1000000 0' -m commit-1 | |||
|
17 | hg commit -d '1000000 0' -u "foo@bar.com" -m commit-1 | |||
|
18 | hg tip | |||
|
19 | echo "[ui]" >> .hg/hgrc | |||
|
20 | echo "username = foobar <foo@bar.com>" >> .hg/hgrc | |||
|
21 | echo 12 > asdf | |||
|
22 | hg commit -d '1000000 0' -m commit-1 | |||
|
23 | hg tip | |||
|
24 | echo 1 > asdf | |||
|
25 | hg commit -d '1000000 0' -u "foo@bar.com" -m commit-1 | |||
|
26 | hg tip |
@@ -4,3 +4,28 b' user: My Name <myname@example.com' | |||||
4 | date: Mon Jan 12 13:46:40 1970 +0000 |
|
4 | date: Mon Jan 12 13:46:40 1970 +0000 | |
5 | summary: commit-1 |
|
5 | summary: commit-1 | |
6 |
|
6 | |||
|
7 | Please choose a commit username to be recorded in the changelog via | |||
|
8 | command line option (-u "First Last <email@example.com>"), in the | |||
|
9 | configuration files (hgrc), or by setting the EMAIL environment variable. | |||
|
10 | ||||
|
11 | abort: No commit username specified! | |||
|
12 | transaction abort! | |||
|
13 | rollback completed | |||
|
14 | changeset: 1:2becd0bae6e6 | |||
|
15 | tag: tip | |||
|
16 | user: foo@bar.com | |||
|
17 | date: Mon Jan 12 13:46:40 1970 +0000 | |||
|
18 | summary: commit-1 | |||
|
19 | ||||
|
20 | changeset: 2:7a0176714f78 | |||
|
21 | tag: tip | |||
|
22 | user: foobar <foo@bar.com> | |||
|
23 | date: Mon Jan 12 13:46:40 1970 +0000 | |||
|
24 | summary: commit-1 | |||
|
25 | ||||
|
26 | changeset: 3:f9b58c5a6352 | |||
|
27 | tag: tip | |||
|
28 | user: foo@bar.com | |||
|
29 | date: Mon Jan 12 13:46:40 1970 +0000 | |||
|
30 | summary: commit-1 | |||
|
31 |
@@ -11,6 +11,6 b' hg commit -m "second" -d "1000000 0" sub' | |||||
11 | cat sub/b |
|
11 | cat sub/b | |
12 | hg co 0 |
|
12 | hg co 0 | |
13 | cat sub/b 2>/dev/null || echo "sub/b not present" |
|
13 | cat sub/b 2>/dev/null || echo "sub/b not present" | |
14 |
test - |
|
14 | test -d sub || echo "sub not present" | |
15 |
|
15 | |||
16 | true |
|
16 | true |
@@ -195,6 +195,9 b' show changed files in the working direct' | |||||
195 | files that match are shown. Files that are clean or ignored, are |
|
195 | files that match are shown. Files that are clean or ignored, are | |
196 | not listed unless -c (clean), -i (ignored) or -A is given. |
|
196 | not listed unless -c (clean), -i (ignored) or -A is given. | |
197 |
|
197 | |||
|
198 | If one revision is given, it is used as the base revision. | |||
|
199 | If two revisions are given, the difference between them is shown. | |||
|
200 | ||||
198 | The codes used to show the status of files are: |
|
201 | The codes used to show the status of files are: | |
199 | M = modified |
|
202 | M = modified | |
200 | A = added |
|
203 | A = added | |
@@ -220,6 +223,7 b' options:' | |||||
220 | -n --no-status hide status prefix |
|
223 | -n --no-status hide status prefix | |
221 | -C --copies show source of copied files |
|
224 | -C --copies show source of copied files | |
222 | -0 --print0 end filenames with NUL, for use with xargs |
|
225 | -0 --print0 end filenames with NUL, for use with xargs | |
|
226 | --rev show difference from revision | |||
223 | -I --include include names matching the given patterns |
|
227 | -I --include include names matching the given patterns | |
224 | -X --exclude exclude names matching the given patterns |
|
228 | -X --exclude exclude names matching the given patterns | |
225 | hg status [OPTION]... [FILE]... |
|
229 | hg status [OPTION]... [FILE]... |
@@ -165,11 +165,13 b' cd ..' | |||||
165 | hg qrefresh |
|
165 | hg qrefresh | |
166 | hg qnew -mbar bar |
|
166 | hg qnew -mbar bar | |
167 | echo foo > foo |
|
167 | echo foo > foo | |
168 | hg add foo |
|
168 | echo bar > bar | |
|
169 | hg add foo bar | |||
169 | hg qrefresh |
|
170 | hg qrefresh | |
170 | hg qpop -a |
|
171 | hg qpop -a | |
171 | echo bar > foo |
|
172 | echo bar > foo | |
172 | hg qpush -a |
|
173 | hg qpush -a | |
|
174 | hg st | |||
173 |
|
175 | |||
174 | cat >>$HGRCPATH <<EOF |
|
176 | cat >>$HGRCPATH <<EOF | |
175 | [diff] |
|
177 | [diff] |
@@ -172,6 +172,8 b' 1 out of 1 hunk ignored -- saving reject' | |||||
172 | patch failed, unable to continue (try -v) |
|
172 | patch failed, unable to continue (try -v) | |
173 | patch failed, rejects left in working dir |
|
173 | patch failed, rejects left in working dir | |
174 | Errors during apply, please fix and refresh bar |
|
174 | Errors during apply, please fix and refresh bar | |
|
175 | ? foo | |||
|
176 | ? foo.rej | |||
175 | new file |
|
177 | new file | |
176 |
|
178 | |||
177 | diff --git a/new b/new |
|
179 | diff --git a/new b/new |
@@ -58,7 +58,6 b' parent: 4:42556b925639' | |||||
58 | parent: 5:f56d4c64ab98 |
|
58 | parent: 5:f56d4c64ab98 | |
59 | user: test |
|
59 | user: test | |
60 | date: Mon Jan 12 13:46:40 1970 +0000 |
|
60 | date: Mon Jan 12 13:46:40 1970 +0000 | |
61 | files: |
|
|||
62 | description: |
|
61 | description: | |
63 | 6 |
|
62 | 6 | |
64 |
|
63 | |||
@@ -70,7 +69,6 b' changeset: 7:a5a6e1f312b9' | |||||
70 | tag: tip |
|
69 | tag: tip | |
71 | user: test |
|
70 | user: test | |
72 | date: Mon Jan 12 13:46:40 1970 +0000 |
|
71 | date: Mon Jan 12 13:46:40 1970 +0000 | |
73 | files: |
|
|||
74 | description: |
|
72 | description: | |
75 | 7 |
|
73 | 7 | |
76 |
|
74 |
@@ -2,7 +2,7 b'' | |||||
2 |
|
2 | |||
3 | http_proxy= hg clone static-http://localhost:20059/ copy |
|
3 | http_proxy= hg clone static-http://localhost:20059/ copy | |
4 | echo $? |
|
4 | echo $? | |
5 |
test - |
|
5 | test -d copy || echo copy: No such file or directory | |
6 |
|
6 | |||
7 | # This server doesn't do range requests so it's basically only good for |
|
7 | # This server doesn't do range requests so it's basically only good for | |
8 | # one pull |
|
8 | # one pull |
@@ -118,6 +118,9 b' show changed files in the working direct' | |||||
118 | files that match are shown. Files that are clean or ignored, are |
|
118 | files that match are shown. Files that are clean or ignored, are | |
119 | not listed unless -c (clean), -i (ignored) or -A is given. |
|
119 | not listed unless -c (clean), -i (ignored) or -A is given. | |
120 |
|
120 | |||
|
121 | If one revision is given, it is used as the base revision. | |||
|
122 | If two revisions are given, the difference between them is shown. | |||
|
123 | ||||
121 | The codes used to show the status of files are: |
|
124 | The codes used to show the status of files are: | |
122 | M = modified |
|
125 | M = modified | |
123 | A = added |
|
126 | A = added | |
@@ -143,6 +146,7 b' options:' | |||||
143 | -n --no-status hide status prefix |
|
146 | -n --no-status hide status prefix | |
144 | -C --copies show source of copied files |
|
147 | -C --copies show source of copied files | |
145 | -0 --print0 end filenames with NUL, for use with xargs |
|
148 | -0 --print0 end filenames with NUL, for use with xargs | |
|
149 | --rev show difference from revision | |||
146 | -I --include include names matching the given patterns |
|
150 | -I --include include names matching the given patterns | |
147 | -X --exclude exclude names matching the given patterns |
|
151 | -X --exclude exclude names matching the given patterns | |
148 | hg status -A: |
|
152 | hg status -A: |
General Comments 0
You need to be logged in to leave comments.
Login now