tests/test-command-template.t
changeset 30115 8e42dfde93d1
parent 30088 d1f5f158768e
child 30231 741e5d7f282d
equal deleted inserted replaced
30114:ad43458d3529 30115:8e42dfde93d1
    26   $ hg add d
    26   $ hg add d
    27   $ hg commit -m 'new head' -d '1500000 0' -u 'person'
    27   $ hg commit -m 'new head' -d '1500000 0' -u 'person'
    28 
    28 
    29   $ hg merge -q foo
    29   $ hg merge -q foo
    30   $ hg commit -m 'merge' -d '1500001 0' -u 'person'
    30   $ hg commit -m 'merge' -d '1500001 0' -u 'person'
       
    31 
       
    32 Test arithmetic operators have the right precedence:
       
    33 
       
    34   $ hg log -l 1 -T '{date(date, "%s") + 5 * 10} {date(date, "%s") - 2 * 3}\n'
       
    35   1500051 1499995
       
    36   $ hg log -l 1 -T '{date(date, "%s") * 5 + 10} {date(date, "%s") * 3 - 2}\n'
       
    37   7500015 4500001
       
    38 
       
    39 Test division:
       
    40 
       
    41   $ hg debugtemplate -r0 -v '{5 / 2} {mod(5, 2)}\n'
       
    42   (template
       
    43     (/
       
    44       ('integer', '5')
       
    45       ('integer', '2'))
       
    46     ('string', ' ')
       
    47     (func
       
    48       ('symbol', 'mod')
       
    49       (list
       
    50         ('integer', '5')
       
    51         ('integer', '2')))
       
    52     ('string', '\n'))
       
    53   2 1
       
    54   $ hg debugtemplate -r0 -v '{5 / -2} {mod(5, -2)}\n'
       
    55   (template
       
    56     (/
       
    57       ('integer', '5')
       
    58       (negate
       
    59         ('integer', '2')))
       
    60     ('string', ' ')
       
    61     (func
       
    62       ('symbol', 'mod')
       
    63       (list
       
    64         ('integer', '5')
       
    65         (negate
       
    66           ('integer', '2'))))
       
    67     ('string', '\n'))
       
    68   -3 -1
       
    69   $ hg debugtemplate -r0 -v '{-5 / 2} {mod(-5, 2)}\n'
       
    70   (template
       
    71     (/
       
    72       (negate
       
    73         ('integer', '5'))
       
    74       ('integer', '2'))
       
    75     ('string', ' ')
       
    76     (func
       
    77       ('symbol', 'mod')
       
    78       (list
       
    79         (negate
       
    80           ('integer', '5'))
       
    81         ('integer', '2')))
       
    82     ('string', '\n'))
       
    83   -3 1
       
    84   $ hg debugtemplate -r0 -v '{-5 / -2} {mod(-5, -2)}\n'
       
    85   (template
       
    86     (/
       
    87       (negate
       
    88         ('integer', '5'))
       
    89       (negate
       
    90         ('integer', '2')))
       
    91     ('string', ' ')
       
    92     (func
       
    93       ('symbol', 'mod')
       
    94       (list
       
    95         (negate
       
    96           ('integer', '5'))
       
    97         (negate
       
    98           ('integer', '2'))))
       
    99     ('string', '\n'))
       
   100   2 -1
       
   101 
       
   102 Filters bind closer than arithmetic:
       
   103 
       
   104   $ hg debugtemplate -r0 -v '{revset(".")|count - 1}\n'
       
   105   (template
       
   106     (-
       
   107       (|
       
   108         (func
       
   109           ('symbol', 'revset')
       
   110           ('string', '.'))
       
   111         ('symbol', 'count'))
       
   112       ('integer', '1'))
       
   113     ('string', '\n'))
       
   114   0
       
   115 
       
   116 But negate binds closer still:
       
   117 
       
   118   $ hg debugtemplate -r0 -v '{1-3|stringify}\n'
       
   119   (template
       
   120     (-
       
   121       ('integer', '1')
       
   122       (|
       
   123         ('integer', '3')
       
   124         ('symbol', 'stringify')))
       
   125     ('string', '\n'))
       
   126   hg: parse error: arithmetic only defined on integers
       
   127   [255]
       
   128   $ hg debugtemplate -r0 -v '{-3|stringify}\n'
       
   129   (template
       
   130     (|
       
   131       (negate
       
   132         ('integer', '3'))
       
   133       ('symbol', 'stringify'))
       
   134     ('string', '\n'))
       
   135   -3
    31 
   136 
    32 Second branch starting at nullrev:
   137 Second branch starting at nullrev:
    33 
   138 
    34   $ hg update null
   139   $ hg update null
    35   0 files updated, 0 files merged, 4 files removed, 0 files unresolved
   140   0 files updated, 0 files merged, 4 files removed, 0 files unresolved
  2888     ('string', '\n'))
  2993     ('string', '\n'))
  2889   123
  2994   123
  2890   $ hg debugtemplate -v '{(-4)}\n'
  2995   $ hg debugtemplate -v '{(-4)}\n'
  2891   (template
  2996   (template
  2892     (group
  2997     (group
  2893       ('integer', '-4'))
  2998       (negate
       
  2999         ('integer', '4')))
  2894     ('string', '\n'))
  3000     ('string', '\n'))
  2895   -4
  3001   -4
  2896   $ hg debugtemplate '{(-)}\n'
  3002   $ hg debugtemplate '{(-)}\n'
  2897   hg: parse error at 2: integer literal without digits
  3003   hg: parse error at 3: not a prefix: )
  2898   [255]
  3004   [255]
  2899   $ hg debugtemplate '{(-a)}\n'
  3005   $ hg debugtemplate '{(-a)}\n'
  2900   hg: parse error at 2: integer literal without digits
  3006   hg: parse error: negation needs an integer argument
  2901   [255]
  3007   [255]
  2902 
  3008 
  2903 top-level integer literal is interpreted as symbol (i.e. variable name):
  3009 top-level integer literal is interpreted as symbol (i.e. variable name):
  2904 
  3010 
  2905   $ hg debugtemplate -D 1=one -v '{1}\n'
  3011   $ hg debugtemplate -D 1=one -v '{1}\n'