view tests/test-tag.t @ 11989:f853873fc66d

aliases: provide more flexible ways to work with shell alias arguments This patch changes the functionality of shell aliases to add more powerful options for working with shell alias arguments. First: the alias name + arguments to a shell alias are set as an HG_ARGS environment variable, delimited by spaces. This matches the behavior of hooks. Second: any occurrences of "$@" (without quotes) are replaced with the arguments, separated by spaces. This happens *before* the alias gets to the shell. Third: any positive numeric variables ("$1", "$2", etc) are replaced with the appropriate argument, indexed from 1. "$0" is replaced with the name of the alias. Any "extra" numeric variables are replaced with an empty string. This happens *before* the alias gets to the shell. These changes allow for more flexible shell aliases: [alias] echo = !echo $@ count = !hg log -r "$@" --template='.' | wc -c | sed -e 's/ //g' qqueuemv = !mv "`hg root`/.hg/patches-$1" "`hg root`/.hg/patches-$2" In action: $ hg echo foo foo $ hg count 'branch(default)' 901 $ hg count 'branch(stable) and keyword(fixes)' 102 $ hg qqueuemv myfeature somefeature
author Steve Losh <steve@stevelosh.com>
date Wed, 18 Aug 2010 18:56:44 -0400
parents b3de1438028d
children 4c94b6d0fb1c
line wrap: on
line source

  $ hg init test
  $ cd test

  $ echo a > a
  $ hg add a
  $ hg commit -m "test" -d "1000000 0"
  $ hg history
  changeset:   0:0acdaf898367
  tag:         tip
  user:        test
  date:        Mon Jan 12 13:46:40 1970 +0000
  summary:     test
  

  $ hg tag ' '
  abort: tag names cannot consist entirely of whitespace

  $ hg tag -d "1000000 0" "bleah"
  $ hg history
  changeset:   1:3ecf002a1c57
  tag:         tip
  user:        test
  date:        Mon Jan 12 13:46:40 1970 +0000
  summary:     Added tag bleah for changeset 0acdaf898367
  
  changeset:   0:0acdaf898367
  tag:         bleah
  user:        test
  date:        Mon Jan 12 13:46:40 1970 +0000
  summary:     test
  

  $ echo foo >> .hgtags
  $ hg tag -d "1000000 0" "bleah2" || echo "failed"
  abort: working copy of .hgtags is changed (please commit .hgtags manually)
  failed

  $ hg revert .hgtags
  $ hg tag -d "1000000 0" -r 0 x y z y y z || echo "failed"
  abort: tag names must be unique
  failed
  $ hg tag -d "1000000 0" tap nada dot tip null . || echo "failed"
  abort: the name 'tip' is reserved
  failed
  $ hg tag -d "1000000 0" "bleah" || echo "failed"
  abort: tag 'bleah' already exists (use -f to force)
  failed
  $ hg tag -d "1000000 0" "blecch" "bleah" || echo "failed"
  abort: tag 'bleah' already exists (use -f to force)
  failed

  $ hg tag -d "1000000 0" --remove "blecch" || echo "failed"
  abort: tag 'blecch' does not exist
  failed
  $ hg tag -d "1000000 0" --remove "bleah" "blecch" "blough" || echo "failed"
  abort: tag 'blecch' does not exist
  failed

  $ hg tag -d "1000000 0" -r 0 "bleah0"
  $ hg tag -l -d "1000000 0" -r 1 "bleah1"
  $ hg tag -d "1000000 0" gack gawk gorp
  $ hg tag -d "1000000 0" -f gack
  $ hg tag -d "1000000 0" --remove gack gorp

  $ cat .hgtags
  0acdaf8983679e0aac16e811534eb49d7ee1f2b4 bleah
  0acdaf8983679e0aac16e811534eb49d7ee1f2b4 bleah0
  868cc8fbb43b754ad09fa109885d243fc49adae7 gack
  868cc8fbb43b754ad09fa109885d243fc49adae7 gawk
  868cc8fbb43b754ad09fa109885d243fc49adae7 gorp
  868cc8fbb43b754ad09fa109885d243fc49adae7 gack
  3807bcf62c5614cb6c16436b514d7764ca5f1631 gack
  3807bcf62c5614cb6c16436b514d7764ca5f1631 gack
  0000000000000000000000000000000000000000 gack
  868cc8fbb43b754ad09fa109885d243fc49adae7 gorp
  0000000000000000000000000000000000000000 gorp
  $ cat .hg/localtags
  3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1

  $ hg update 0
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg tag -d "1000000 0" "foobar"
  $ cat .hgtags
  0acdaf8983679e0aac16e811534eb49d7ee1f2b4 foobar
  $ cat .hg/localtags
  3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1

  $ hg tag -l 'xx
  > newline'
  abort: '\n' cannot be used in a tag name
  $ hg tag -l 'xx:xx'
  abort: ':' cannot be used in a tag name

cloning local tags

  $ cd ..
  $ hg -R test log -r0:5
  changeset:   0:0acdaf898367
  tag:         bleah
  tag:         bleah0
  tag:         foobar
  user:        test
  date:        Mon Jan 12 13:46:40 1970 +0000
  summary:     test
  
  changeset:   1:3ecf002a1c57
  tag:         bleah1
  user:        test
  date:        Mon Jan 12 13:46:40 1970 +0000
  summary:     Added tag bleah for changeset 0acdaf898367
  
  changeset:   2:868cc8fbb43b
  tag:         gawk
  user:        test
  date:        Mon Jan 12 13:46:40 1970 +0000
  summary:     Added tag bleah0 for changeset 0acdaf898367
  
  changeset:   3:3807bcf62c56
  user:        test
  date:        Mon Jan 12 13:46:40 1970 +0000
  summary:     Added tag gack, gawk, gorp for changeset 868cc8fbb43b
  
  changeset:   4:140c6e8597b4
  user:        test
  date:        Mon Jan 12 13:46:40 1970 +0000
  summary:     Added tag gack for changeset 3807bcf62c56
  
  changeset:   5:470a65fa7cc9
  user:        test
  date:        Mon Jan 12 13:46:40 1970 +0000
  summary:     Removed tag gack, gorp
  
  $ hg clone -q -rbleah1 test test1
  $ hg -R test1 parents --style=compact
  1[tip]   3ecf002a1c57   1970-01-12 13:46 +0000   test
    Added tag bleah for changeset 0acdaf898367
  
  $ hg clone -q -r5 test#bleah1 test2
  $ hg -R test2 parents --style=compact
  5[tip]   470a65fa7cc9   1970-01-12 13:46 +0000   test
    Removed tag gack, gorp
  
  $ hg clone -q -U test#bleah1 test3
  $ hg -R test3 parents --style=compact

  $ cd test

issue 601

  $ python << EOF
  > f = file('.hg/localtags'); last = f.readlines()[-1][:-1]; f.close()
  > f = file('.hg/localtags', 'w'); f.write(last); f.close()
  > EOF
  $ cat .hg/localtags; echo
  3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1
  $ hg tag -l localnewline
  $ cat .hg/localtags; echo
  3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1
  f68b039e72eacbb2e68b0543e1f6e50990aa2bb5 localnewline
  

  $ python << EOF
  > f = file('.hgtags'); last = f.readlines()[-1][:-1]; f.close()
  > f = file('.hgtags', 'w'); f.write(last); f.close()
  > EOF
  $ hg ci -d '1000000 0' -m'broken manual edit of .hgtags'
  $ cat .hgtags; echo
  0acdaf8983679e0aac16e811534eb49d7ee1f2b4 foobar
  $ hg tag -d '1000000 0' newline
  $ cat .hgtags; echo
  0acdaf8983679e0aac16e811534eb49d7ee1f2b4 foobar
  6ae703d793c8b1f097116869275ecd97b2977a2b newline
  

tag and branch using same name

  $ hg branch tag-and-branch-same-name
  marked working directory as branch tag-and-branch-same-name
  $ hg ci -m"discouraged"
  $ hg tag tag-and-branch-same-name
  warning: tag tag-and-branch-same-name conflicts with existing branch name

test custom commit messages

  $ cat > $HGTMP/editor <<'__EOF__'
  > #!/bin/sh
  > echo "custom tag message" > "$1"
  > echo "second line" >> "$1"
  > __EOF__
  $ chmod +x "$HGTMP"/editor
  $ HGEDITOR="'$HGTMP'"/editor hg tag custom-tag -e
  $ hg log -l1 --template "{desc}\n"
  custom tag message
  second line