tests/test-subrepo-paths.t
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Tue, 06 Jan 2015 23:46:18 +0900
changeset 23742 3a4d8a6ce432
parent 19380 ee07f9d142c9
child 35400 4441705b7111
permissions -rw-r--r--
revset: introduce new operator "##" to concatenate strings/symbols at runtime Before this patch, there is no way to concatenate strings at runtime. For example, to search for the issue ID "1234" in descriptions against all of "issue 1234", "issue:1234", issue1234" and "bug(1234)" patterns, the revset below should be written fully from scratch for each issue ID. grep(r"\bissue[ :]?1234\b|\bbug\(1234\)") This patch introduces new infix operator "##" to concatenate strings/symbols at runtime. Operator symbol "##" comes from the same one of C pre-processor. This concatenation allows parametrizing a part of strings in revset queries. In the case of example above, the definition of the revset alias using operator "##" below can search issue ID "1234" in complicated patterns by "issue(1234)" simply: issue($1) = grep(r"\bissue[ :]?" ## $1 ## r"\b|\bbug\(" ## $1 ## r"\)") "##" operator does: - concatenate not only strings but also symbols into the string Exact distinction between strings and symbols seems not to be convenience, because it is tiresome for users (and "revset.getstring" treats both similarly) For example of revset alias "issue()", "issue(1234)" is easier than "issue('1234')". - have higher priority than any other prefix, infix and postfix operators (like as "##" of C pre-processor) This patch (re-)assigns the priority 20 to "##", and 21 to "(", because priority 19 is already assigned to "-" as prefix "negate".

  $ hg init outer
  $ cd outer

  $ echo '[paths]' >> .hg/hgrc
  $ echo 'default = http://example.net/' >> .hg/hgrc

hg debugsub with no remapping

  $ echo 'sub = libfoo' > .hgsub
  $ hg add .hgsub

  $ hg debugsub
  path sub
   source   libfoo
   revision 

hg debugsub with remapping

  $ echo '[subpaths]' >> .hg/hgrc
  $ printf 'http://example.net/lib(.*) = C:\\libs\\\\1-lib\\\n' >> .hg/hgrc

  $ hg debugsub
  path sub
   source   C:\libs\foo-lib\
   revision 

test cumulative remapping, the $HGRCPATH file is loaded first

  $ echo '[subpaths]' >> $HGRCPATH
  $ echo 'libfoo = libbar' >> $HGRCPATH
  $ hg debugsub
  path sub
   source   C:\libs\bar-lib\
   revision 

test absolute source path -- testing with a URL is important since
standard os.path.join wont treat that as an absolute path

  $ echo 'abs = http://example.net/abs' > .hgsub
  $ hg debugsub
  path abs
   source   http://example.net/abs
   revision 

  $ echo 'abs = /abs' > .hgsub
  $ hg debugsub
  path abs
   source   /abs
   revision 

test bad subpaths pattern

  $ cat > .hg/hgrc <<EOF
  > [subpaths]
  > .* = \1
  > EOF
  $ hg debugsub
  abort: bad subrepository pattern in $TESTTMP/outer/.hg/hgrc:2: invalid group reference (glob)
  [255]

  $ cd ..