Show More
@@ -72,6 +72,8 b' In addition to filters, there are some b' | |||
|
72 | 72 | |
|
73 | 73 | - sub(pat, repl, expr) |
|
74 | 74 | |
|
75 | - word(number, text[, separator]) | |
|
76 | ||
|
75 | 77 | Also, for any expression that returns a list, there is a list operator: |
|
76 | 78 | |
|
77 | 79 | - expr % "{template}" |
@@ -130,3 +132,7 b' Some sample command line templates:' | |||
|
130 | 132 | - Show only commit descriptions that start with "template":: |
|
131 | 133 | |
|
132 | 134 | $ hg log --template "{startswith(\"template\", firstline(desc))}\n" |
|
135 | ||
|
136 | - Print the first word of each line of a commit message:: | |
|
137 | ||
|
138 | $ hg log --template "{word(\"0\", desc)}\n" |
@@ -477,6 +477,25 b' def startswith(context, mapping, args):' | |||
|
477 | 477 | return '' |
|
478 | 478 | |
|
479 | 479 | |
|
480 | def word(context, mapping, args): | |
|
481 | """return nth word from a string""" | |
|
482 | if not (2 <= len(args) <= 3): | |
|
483 | raise error.ParseError(_("word expects two or three arguments, got %d") | |
|
484 | % len(args)) | |
|
485 | ||
|
486 | num = int(stringify(args[0][0](context, mapping, args[0][1]))) | |
|
487 | text = stringify(args[1][0](context, mapping, args[1][1])) | |
|
488 | if len(args) == 3: | |
|
489 | splitter = stringify(args[2][0](context, mapping, args[2][1])) | |
|
490 | else: | |
|
491 | splitter = None | |
|
492 | ||
|
493 | tokens = text.split(splitter) | |
|
494 | if num >= len(tokens): | |
|
495 | return '' | |
|
496 | else: | |
|
497 | return tokens[num] | |
|
498 | ||
|
480 | 499 | methods = { |
|
481 | 500 | "string": lambda e, c: (runstring, e[1]), |
|
482 | 501 | "rawstring": lambda e, c: (runrawstring, e[1]), |
@@ -504,6 +523,7 b' funcs = {' | |||
|
504 | 523 | "startswith": startswith, |
|
505 | 524 | "strip": strip, |
|
506 | 525 | "sub": sub, |
|
526 | "word": word, | |
|
507 | 527 | } |
|
508 | 528 | |
|
509 | 529 | # template engine |
@@ -1917,3 +1917,61 b' Test bad template with better error mess' | |||
|
1917 | 1917 | $ hg log -Gv -R a --template '{desc|user()}' |
|
1918 | 1918 | hg: parse error: expected a symbol, got 'func' |
|
1919 | 1919 | [255] |
|
1920 | ||
|
1921 | Test word function (including index out of bounds graceful failure) | |
|
1922 | ||
|
1923 | $ hg log -Gv -R a --template "{word('1', desc)}" | |
|
1924 | @ | |
|
1925 | | | |
|
1926 | o | |
|
1927 | | | |
|
1928 | o | |
|
1929 | ||
|
1930 | o | |
|
1931 | |\ | |
|
1932 | | o head | |
|
1933 | | | | |
|
1934 | o | branch | |
|
1935 | |/ | |
|
1936 | o user, | |
|
1937 | | | |
|
1938 | o person | |
|
1939 | | | |
|
1940 | o 1 | |
|
1941 | | | |
|
1942 | o 1 | |
|
1943 | ||
|
1944 | ||
|
1945 | Test word third parameter used as splitter | |
|
1946 | ||
|
1947 | $ hg log -Gv -R a --template "{word('0', desc, 'o')}" | |
|
1948 | @ future | |
|
1949 | | | |
|
1950 | o third | |
|
1951 | | | |
|
1952 | o sec | |
|
1953 | ||
|
1954 | o merge | |
|
1955 | |\ | |
|
1956 | | o new head | |
|
1957 | | | | |
|
1958 | o | new branch | |
|
1959 | |/ | |
|
1960 | o n | |
|
1961 | | | |
|
1962 | o n | |
|
1963 | | | |
|
1964 | o | |
|
1965 | | | |
|
1966 | o line 1 | |
|
1967 | line 2 | |
|
1968 | ||
|
1969 | Test word error messages for not enough and too many arguments | |
|
1970 | ||
|
1971 | $ hg log -Gv -R a --template "{word('0')}" | |
|
1972 | hg: parse error: word expects two or three arguments, got 1 | |
|
1973 | [255] | |
|
1974 | ||
|
1975 | $ hg log -Gv -R a --template "{word('0', desc, 'o', 'h', 'b', 'o', 'y')}" | |
|
1976 | hg: parse error: word expects two or three arguments, got 7 | |
|
1977 | [255] |
General Comments 0
You need to be logged in to leave comments.
Login now