##// END OF EJS Templates
Merge with crew
Matt Mackall -
r3490:ceaa3fef merge default
parent child Browse files
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. If you also want to tell it how to
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_export()
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 or username@hostname, unless
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 (files, fuzz) = patch.patch(patchfile, self.ui, strip=1,
413 fuzz = patch.patch(patchfile, self.ui, strip=1, cwd=repo.root,
413 cwd=repo.root)
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, [], 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 branch = changes[5].get("branch")
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 else:
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/ssh_config, e.g.:
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 off
2108 Compression no
2097 Host *
2109 Host *
2098 Compression on
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, match=matchfn,
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", motd=self.motd, **map)
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 files, fuzz
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 files, fuzz = {}, False
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 files, fuzz = __patch(patchname)
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 n = self.node(r)
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 for x in showlist('branch', brinfo[changenode],
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, inst))
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 found username is an empty string to force specifying
230 Abort if no username is found, to force specifying the commit user
230 the commit user elsewhere, e.g. with line option or repo hgrc.
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 is None:
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>#repo|escape#: Changeset</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">#node|short#</td></tr>
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>#repo|escape#: Annotate</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>#repo|escape#: File revision</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="#url#rev/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr>'
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/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr>'
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}/#file|urlescape#{sessionvars%urlparameter}">#node|short#</a></td></tr>'
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}/#file|urlescape#{sessionvars%urlparameter}">#node|short#</a></td></tr>'
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}\nfiles: {files}\n{file_adds}{file_dels}{file_copies}description:\n{desc|strip}\n\n\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 { height:17px; padding:4px 8px; background-color: #d9d8d1; }
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 [ -e acl.config ]; then
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 -e copy || echo copy: No such file or directory
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 3[tip] 10e46f2dcbf4 1970-01-16 01:06 +0000 person
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 3[tip] 10e46f2dcbf4 1970-01-16 01:06 +0000 person
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 3[tip]:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
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] [tip]
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 -e sub || echo "sub not present"
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 -e copy || echo copy: No such file or directory
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