Show More
@@ -147,3 +147,5 bb96d4a497432722623ae60d9bc734a1e360179e | |||
|
147 | 147 | c850f0ed54c1d42f9aa079ad528f8127e5775217 0 iQIVAwUAWTQINUemf/qjRqrOAQjZDw//b4pEgHYfWRVDEmLZtevysfhlJzbSyLAnWgNnRUVdSwl4WRF1r6ds/q7N4Ege5wQHjOpRtx4jC3y/riMbrLUlaeUXzCdqKgm4JcINS1nXy3IfkeDdUKyOR9upjaVhIEzCMRpyzabdYuflh5CoxayO7GFk2iZ8c1oAl4QzuLSspn9w+znqDg0HrMDbRNijStSulNjkqutih9UqT/PYizhE1UjL0NSnpYyD1vDljsHModJc2dhSzuZ1c4VFZHkienk+CNyeLtVKg8aC+Ej/Ppwq6FlE461T/RxOEzf+WFAc9F4iJibSN2kAFB4ySJ43y+OKkvzAwc5XbUx0y6OlWn2Ph+5T54sIwqasG3DjXyVrwVtAvCrcWUmOyS0RfkKoDVepMPIhFXyrhGqUYSq25Gt6tHVtIrlcWARIGGWlsE+PSHi87qcnSjs4xUzZwVvJWz4fuM1AUG/GTpyt4w3kB85XQikIINkmSTmsM/2/ar75T6jBL3kqOCGOL3n7bVZsGXllhkkQ7e/jqPPWnNXm8scDYdT3WENNu34zZp5ZmqdTXPAIIaqGswnU04KfUSEoYtOMri3E2VvrgMkiINm9BOKpgeTsMb3dkYRw2ZY3UAH9QfdX9BZywk6v3kkE5ghLWMUoQ4sqRlTo7mJKA8+EodjmIGRV/kAv1f7pigg6pIWWEyo= |
|
148 | 148 | 26c49ed51a698ec016d2b4c6b44ca3c3f73cc788 0 iQIcBAABCAAGBQJZXQSmAAoJELnJ3IJKpb3VmTwP/jsxFTlKzWU8EnEhEViiP2YREOD3AXU7685DIMnoyVAsZgxrt0CG6Y92b5sINCeh5B0ORPQ7+xi2Xmz6tX8EeAR+/Dpdx6K623yExf8kq91zgfMvYkatNMu6ZVfywibYZAASq02oKoX7WqSPcQG/OwgtdFiGacCrG5iMH7wRv0N9hPc6D5vAV8/H/Inq8twpSG5SGDpCdKj7KPZiY8DFu/3OXatJtl+byg8zWT4FCYKkBPvmZp8/sRhDKBgwr3RvF1p84uuw/QxXjt+DmGxgtjvObjHr+shCMcKBAuZ4RtZmyEo/0L81uaTElHu1ejsEzsEKxs+8YifnH070PTFoV4VXQyXfTc8AyaqHE6rzX96a/HjQiJnL4dFeTZIrUhGK3AkObFLWJxVTo4J8+oliBQQldIh1H2yb1ZMfwapLnUGIqSieHDGZ6K2ccNJK8Q7IRhTCvYc0cjsnbwTpV4cebGqf3WXZhX0cZN+TNfhh/HGRzR1EeAAavjJqpDam1OBA5TmtJd/lHLIRVR5jyG+r4SK0XDlJ8uSfah7MpVH6aQ6UrycPyFusGXQlIqJ1DYQaBrI/SRJfIvRUmvVz9WgKLe83oC3Ui3aWR9rNjMb2InuQuXjeZaeaYfBAUYACcGfCZpZZvoEkMHCqtTng1rbbFnKMFk5kVy9YWuVgK9Iuh0O5 |
|
149 | 149 | 857876ebaed4e315f63157bd157d6ce553c7ab73 0 iQIVAwUAWW9XW0emf/qjRqrOAQhI7A//cKXIM4l8vrWWsc1Os4knXm/2UaexmAwV70TpviKL9RxCy5zBP/EapCaGRCH8uNPOQTkWGR9Aucm3CtxhggCMzULQxxeH86mEpWf1xILWLySPXW/t2f+2zxrwLSAxxqFJtuYv83Pe8CnS3y4BlgHnBKYXH8XXuW8uvfc0lHKblhrspGBIAinx7vPLoGQcpYrn9USWUKq5d9FaCLQCDT9501FHKf5dlYQajevCUDnewtn5ohelOXjTJQClW3aygv/z+98Kq7ZhayeIiZu+SeP+Ay7lZPklXcy6eyRiQtGCa1yesb9v53jKtgxWewV4o6zyuUesdknZ/IBeNUgw8LepqTIJo6/ckyvBOsSQcda81DuYNUChZLYTSXYPHEUmYiz6CvNoLEgHF/oO5p6CZXOPWbmLWrAFd+0+1Tuq8BSh+PSdEREM3ZLOikkXoVzTKBgu4zpMvmBnjliBg7WhixkcG0v5WunlV9/oHAIpsKdL7AatU+oCPulp+xDpTKzRazEemYiWG9zYKzwSMk9Nc17e2tk+EtFSPsPo4iVCXMgdIZSTNBvynKEFXZQVPWVa+bYRdAmbSY8awiX7exxYL10UcpnN2q/AH/F7rQzAmo8eZ3OtD0+3Nk3JRx0/CMyzKLPYDpdUgwmaPb+s2Bsy7f7TfmA7jTa69YqB1/zVwlWULr0= |
|
150 | 5544af8622863796a0027566f6b646e10d522c4c 0 iQIcBAABCAAGBQJZjJflAAoJELnJ3IJKpb3V19kQALCvTdPrpce5+rBNbFtLGNFxTMDol1dUy87EUAWiArnfOzW3rKBdYxvxDL23BpgUfjRm1fAXdayVvlj6VC6Dyb195OLmc/I9z7SjFxsfmxWilF6U0GIa3W0x37i05EjfcccrBIuSLrvR6AWyJhjLOBCcyAqD/HcEom00/L+o2ry9CDQNLEeVuNewJiupcUqsTIG2yS26lWbtLZuoqS2T4Nlg8wjJhiSXlsZSuAF55iUJKlTQP6KyWReiaYuEVfm/Bybp0A2bFcZCYpWPwnwKBdSCHhIalH8PO57gh9J7xJVnyyBg5PU6n4l6PrGOmKhNiU/xyNe36tEAdMW6svcVvt8hiY0dnwWqR6wgnFFDu0lnTMUcjsy5M5FBY6wSw9Fph8zcNRzYyaeUbasNonPvrIrk21nT3ET3RzVR3ri2nJDVF+0GlpogGfk9k7wY3808091BMsyV3448ZPKQeWiK4Yy4UOUwbKV7YAsS5MdDnC1uKjl4GwLn9UCY/+Q2/2R0CBZ13Tox+Nbo6hBRuRGtFIbLK9j7IIUhhZrIZFSh8cDNkC+UMaS52L5z7ECvoYIUpw+MJ7NkMLHIVGZ2Nxn0C7IbGO6uHyR7D6bdNpxilU+WZStHk0ppZItRTm/htar4jifnaCI8F8OQNYmZ3cQhxx6qV2Tyow8arvWb1NYXrocG | |
|
151 | 943c91326b23954e6e1c6960d0239511f9530258 0 iQIcBAABCAAGBQJZjKKZAAoJELnJ3IJKpb3VGQkP/0iF6Khef0lBaRhbSAPwa7RUBb3iaBeuwmeic/hUjMoU1E5NR36bDDaF3u2di5mIYPBONFIeCPf9/DKyFkidueX1UnlAQa3mjh/QfKTb4/yO2Nrk7eH+QtrYxVUUYYjwgp4rS0Nd/++I1IUOor54vqJzJ7ZnM5O1RsE7VI1esAC/BTlUuO354bbm08B0owsZBwVvcVvpV4zeTvq5qyPxBJ3M0kw83Pgwh3JZB9IYhOabhSUBcA2fIPHgYGYnJVC+bLOeMWI1HJkJeoYfClNUiQUjAmi0cdTC733eQnHkDw7xyyFi+zkKu6JmU1opxkHSuj4Hrjul7Gtw3vVWWUPufz3AK7oymNp2Xr5y1HQLDtNJP3jicTTG1ae2TdX5Az3ze0I8VGbpR81/6ShAvY2cSKttV3I+2k4epxTTTf0xaZS1eUdnFOox6acElG2reNzx7EYYxpHj17K8N2qNzyY78iPgbJ+L39PBFoiGXMZJqWCxxIHoK1MxlXa8WwSnsXAU768dJvEn2N1x3fl+aeaWzeM4/5Qd83YjFuCeycuRnIo3rejSX3rWFAwZE0qQHKI5YWdKDLxIfdHTjdfMP7np+zLcHt0DV/dHmj2hKQgU0OK04fx7BrmdS1tw67Y9bL3H3TDohn7khU1FrqrKVuqSLbLsxnNyWRbZQF+DCoYrHlIW |
@@ -160,3 +160,5 bb96d4a497432722623ae60d9bc734a1e360179e | |||
|
160 | 160 | c850f0ed54c1d42f9aa079ad528f8127e5775217 4.2.1 |
|
161 | 161 | 26c49ed51a698ec016d2b4c6b44ca3c3f73cc788 4.2.2 |
|
162 | 162 | 857876ebaed4e315f63157bd157d6ce553c7ab73 4.3-rc |
|
163 | 5544af8622863796a0027566f6b646e10d522c4c 4.3 | |
|
164 | 943c91326b23954e6e1c6960d0239511f9530258 4.2.3 |
@@ -4,14 +4,14 Mercurial | |||
|
4 | 4 | Mercurial is a fast, easy to use, distributed revision control tool |
|
5 | 5 | for software developers. |
|
6 | 6 | |
|
7 | Basic install: | |
|
7 | Basic install:: | |
|
8 | 8 | |
|
9 | 9 | $ make # see install targets |
|
10 | 10 | $ make install # do a system-wide install |
|
11 | 11 | $ hg debuginstall # sanity-check setup |
|
12 | 12 | $ hg # see help |
|
13 | 13 | |
|
14 | Running without installing: | |
|
14 | Running without installing:: | |
|
15 | 15 | |
|
16 | 16 | $ make local # build for inplace usage |
|
17 | 17 | $ ./hg --version # should show the latest version |
@@ -5,7 +5,7 SRCS = chg.c hgclient.c procutil.c util. | |||
|
5 | 5 | OBJS = $(SRCS:.c=.o) |
|
6 | 6 | |
|
7 | 7 | CFLAGS ?= -O2 -Wall -Wextra -pedantic -g |
|
8 | CPPFLAGS ?= -D_FORTIFY_SOURCE=2 | |
|
8 | CPPFLAGS ?= -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE | |
|
9 | 9 | override CFLAGS += -std=gnu99 |
|
10 | 10 | ifdef HGPATH |
|
11 | 11 | override CPPFLAGS += -DHGPATH=\"$(HGPATH)\" |
@@ -1,4 +1,7 | |||
|
1 | 1 | FROM centos:centos5 |
|
2 | RUN sed -i 's/^mirrorlist/#mirrorlist/' /etc/yum.repos.d/*.repo | |
|
3 | RUN sed -i 's/^#\(baseurl=\)http:\/\/mirror.centos.org\/centos/\1http:\/\/vault.centos.org/' /etc/yum.repos.d/*.repo | |
|
4 | RUN sed -i 's/\$releasever/5.11/' /etc/yum.repos.d/*.repo | |
|
2 | 5 | RUN yum install -y gcc make rpm-build gettext tar |
|
3 | 6 | RUN yum install -y python-devel python-docutils |
|
4 | 7 | # For creating repo meta data |
@@ -472,7 +472,7 class rebaseruntime(object): | |||
|
472 | 472 | commitmsg = self.collapsemsg |
|
473 | 473 | else: |
|
474 | 474 | commitmsg = 'Collapsed revision' |
|
475 | for rebased in self.state: | |
|
475 | for rebased in sorted(self.state): | |
|
476 | 476 | if rebased not in self.skipped and\ |
|
477 | 477 | self.state[rebased] > nullmerge: |
|
478 | 478 | commitmsg += '\n* %s' % repo[rebased].description() |
@@ -112,14 +112,20 def docstrings(path): | |||
|
112 | 112 | |
|
113 | 113 | for func, rstrip in functions: |
|
114 | 114 | if func.__doc__: |
|
115 | funcmod = inspect.getmodule(func) | |
|
116 | extra = '' | |
|
117 | if funcmod.__package__ == funcmod.__name__: | |
|
118 | extra = '/__init__' | |
|
119 | actualpath = '%s%s.py' % (funcmod.__name__.replace('.', '/'), extra) | |
|
120 | ||
|
115 | 121 | src = inspect.getsource(func) |
|
116 | name = "%s.%s" % (path, func.__name__) | |
|
122 | name = "%s.%s" % (actualpath, func.__name__) | |
|
117 | 123 | lineno = inspect.getsourcelines(func)[1] |
|
118 | 124 | doc = func.__doc__ |
|
119 | 125 | if rstrip: |
|
120 | 126 | doc = doc.rstrip() |
|
121 | 127 | lineno += offset(src, doc, name, 1) |
|
122 | print(poentry(path, lineno, doc)) | |
|
128 | print(poentry(actualpath, lineno, doc)) | |
|
123 | 129 | |
|
124 | 130 | |
|
125 | 131 | def rawtext(path): |
@@ -26,6 +26,7 from . import ( | |||
|
26 | 26 | changelog, |
|
27 | 27 | copies, |
|
28 | 28 | crecord as crecordmod, |
|
29 | dirstateguard, | |
|
29 | 30 | encoding, |
|
30 | 31 | error, |
|
31 | 32 | formatter, |
@@ -2889,14 +2890,23 def commit(ui, repo, commitfunc, pats, o | |||
|
2889 | 2890 | message = logmessage(ui, opts) |
|
2890 | 2891 | matcher = scmutil.match(repo[None], pats, opts) |
|
2891 | 2892 | |
|
2893 | dsguard = None | |
|
2892 | 2894 | # extract addremove carefully -- this function can be called from a command |
|
2893 | 2895 | # that doesn't support addremove |
|
2894 | if opts.get('addremove'): | |
|
2895 | if scmutil.addremove(repo, matcher, "", opts) != 0: | |
|
2896 | raise error.Abort( | |
|
2897 | _("failed to mark all new/missing files as added/removed")) | |
|
2898 | ||
|
2899 | return commitfunc(ui, repo, message, matcher, opts) | |
|
2896 | try: | |
|
2897 | if opts.get('addremove'): | |
|
2898 | dsguard = dirstateguard.dirstateguard(repo, 'commit') | |
|
2899 | if scmutil.addremove(repo, matcher, "", opts) != 0: | |
|
2900 | raise error.Abort( | |
|
2901 | _("failed to mark all new/missing files as added/removed")) | |
|
2902 | ||
|
2903 | r = commitfunc(ui, repo, message, matcher, opts) | |
|
2904 | if dsguard: | |
|
2905 | dsguard.close() | |
|
2906 | return r | |
|
2907 | finally: | |
|
2908 | if dsguard: | |
|
2909 | dsguard.release() | |
|
2900 | 2910 | |
|
2901 | 2911 | def samefile(f, ctx1, ctx2): |
|
2902 | 2912 | if f in ctx1.manifest(): |
@@ -828,6 +828,7 def _dispatch(req): | |||
|
828 | 828 | color.setup(ui_) |
|
829 | 829 | |
|
830 | 830 | if util.parsebool(options['pager']): |
|
831 | # ui.pager() expects 'internal-always-' prefix in this case | |
|
831 | 832 | ui.pager('internal-always-' + cmd) |
|
832 | 833 | elif options['pager'] != 'auto': |
|
833 | 834 | ui.disablepager() |
@@ -16,6 +16,7 import shlex | |||
|
16 | 16 | import sys |
|
17 | 17 | |
|
18 | 18 | ispy3 = (sys.version_info[0] >= 3) |
|
19 | ispypy = (r'__pypy__' in sys.builtin_module_names) | |
|
19 | 20 | |
|
20 | 21 | if not ispy3: |
|
21 | 22 | import cookielib |
@@ -945,8 +945,14 class ui(object): | |||
|
945 | 945 | not "history, "summary" not "summ", etc. |
|
946 | 946 | """ |
|
947 | 947 | if (self._disablepager |
|
948 | or self.pageractive | |
|
949 | or command in self.configlist('pager', 'ignore') | |
|
948 | or self.pageractive): | |
|
949 | # how pager should do is already determined | |
|
950 | return | |
|
951 | ||
|
952 | if not command.startswith('internal-always-') and ( | |
|
953 | # explicit --pager=on (= 'internal-always-' prefix) should | |
|
954 | # take precedence over disabling factors below | |
|
955 | command in self.configlist('pager', 'ignore') | |
|
950 | 956 | or not self.configbool('ui', 'paginate') |
|
951 | 957 | or not self.configbool('pager', 'attend-' + command, True) |
|
952 | 958 | # TODO: if we want to allow HGPLAINEXCEPT=pager, |
@@ -1209,6 +1215,7 class ui(object): | |||
|
1209 | 1215 | # call write() so output goes through subclassed implementation |
|
1210 | 1216 | # e.g. color extension on Windows |
|
1211 | 1217 | self.write(prompt, prompt=True) |
|
1218 | self.flush() | |
|
1212 | 1219 | |
|
1213 | 1220 | # instead of trying to emulate raw_input, swap (self.fin, |
|
1214 | 1221 | # self.fout) with (sys.stdin, sys.stdout) |
@@ -584,6 +584,14 class sortdict(collections.OrderedDict): | |||
|
584 | 584 | del self[key] |
|
585 | 585 | super(sortdict, self).__setitem__(key, value) |
|
586 | 586 | |
|
587 | if pycompat.ispypy: | |
|
588 | # __setitem__() isn't called as of PyPy 5.8.0 | |
|
589 | def update(self, src): | |
|
590 | if isinstance(src, dict): | |
|
591 | src = src.iteritems() | |
|
592 | for k, v in src: | |
|
593 | self[k] = v | |
|
594 | ||
|
587 | 595 | @contextlib.contextmanager |
|
588 | 596 | def acceptintervention(tr=None): |
|
589 | 597 | """A context manager that closes the transaction on InterventionRequired |
@@ -41,6 +41,9 filediff(){ | |||
|
41 | 41 | diff -u "$file1" "$file2" | |
|
42 | 42 | sed "s@^--- /dev/null\(.*\)\$@--- $1\1@" | |
|
43 | 43 | sed "s@^\+\+\+ /dev/null\(.*\)\$@+++ $2\1@" |
|
44 | ||
|
45 | # in this case, files differ from each other | |
|
46 | return 1 | |
|
44 | 47 | } |
|
45 | 48 | |
|
46 | 49 | if test -d "$1" -o -d "$2"; then |
@@ -53,6 +56,14 if test -d "$1" -o -d "$2"; then | |||
|
53 | 56 | while read file; do |
|
54 | 57 | filediff "$1/$file" "$2/$file" "diff -Nru $1/$file $2/$file" |
|
55 | 58 | done |
|
59 | ||
|
60 | # TODO: there is no portable way for current while-read based | |
|
61 | # implementation to return 1 at detecting changes. | |
|
62 | # | |
|
63 | # On bash and dash, assignment to variable inside while-block | |
|
64 | # doesn't affect outside, because inside while-block is executed | |
|
65 | # in sub-shell. BTW, it affects outside while-block on ksh (as sh | |
|
66 | # on Solaris). | |
|
56 | 67 | else |
|
57 | 68 | filediff "$1" "$2" |
|
58 | 69 | fi |
@@ -47,21 +47,21 Make a helper function to check cache da | |||
|
47 | 47 | > echo bad > $CACHE |
|
48 | 48 | > test -z "$CLEAN" || $CLEAN |
|
49 | 49 | > hg $CMD > after |
|
50 |
> |
|
|
50 | > "$RUNTESTDIR/pdiff" before after || echo "*** overwrite corruption" | |
|
51 | 51 | > echo corruption >> $CACHE |
|
52 | 52 | > test -z "$CLEAN" || $CLEAN |
|
53 | 53 | > hg $CMD > after |
|
54 |
> |
|
|
54 | > "$RUNTESTDIR/pdiff" before after || echo "*** append corruption" | |
|
55 | 55 | > rm $CACHE |
|
56 | 56 | > mkdir $CACHE |
|
57 | 57 | > test -z "$CLEAN" || $CLEAN |
|
58 | 58 | > hg $CMD > after |
|
59 |
> |
|
|
59 | > "$RUNTESTDIR/pdiff" before after || echo "*** read-only corruption" | |
|
60 | 60 | > test -d $CACHE || echo "*** directory clobbered" |
|
61 | 61 | > rmdir $CACHE |
|
62 | 62 | > test -z "$CLEAN" || $CLEAN |
|
63 | 63 | > hg $CMD > after |
|
64 |
> |
|
|
64 | > "$RUNTESTDIR/pdiff" before after || echo "*** missing corruption" | |
|
65 | 65 | > test -f $CACHE || echo "not rebuilt" |
|
66 | 66 | > } |
|
67 | 67 |
@@ -147,6 +147,18 Using the advanced --extra flag | |||
|
147 | 147 | oldhash=bar |
|
148 | 148 | sourcehash=foo |
|
149 | 149 | |
|
150 | Failed commit with --addremove should not update dirstate | |
|
151 | ||
|
152 | $ echo foo > newfile | |
|
153 | $ hg status | |
|
154 | ? newfile | |
|
155 | $ HGEDITOR=false hg ci --addremove | |
|
156 | adding newfile | |
|
157 | abort: edit failed: false exited with status 1 | |
|
158 | [255] | |
|
159 | $ hg status | |
|
160 | ? newfile | |
|
161 | ||
|
150 | 162 | Make sure we do not obscure unknown requires file entries (issue2649) |
|
151 | 163 | |
|
152 | 164 | $ echo foo >> foo |
@@ -263,8 +263,16 Prepare custom diff/edit tool: | |||
|
263 | 263 | will change to /tmp/extdiff.TMP and populate directories a.TMP and a |
|
264 | 264 | and start tool |
|
265 | 265 | |
|
266 | #if windows | |
|
267 | $ cat > 'diff tool.bat' << EOF | |
|
268 | > @$PYTHON "`pwd`/diff tool.py" | |
|
269 | > EOF | |
|
270 | $ hg extdiff -p "`pwd`/diff tool.bat" | |
|
271 | [1] | |
|
272 | #else | |
|
266 | 273 | $ hg extdiff -p "`pwd`/diff tool.py" |
|
267 | 274 | [1] |
|
275 | #endif | |
|
268 | 276 | |
|
269 | 277 | Diff in working directory, after: |
|
270 | 278 |
@@ -245,6 +245,7 Check absolute/relative import of extens | |||
|
245 | 245 | |
|
246 | 246 | #if no-py3k |
|
247 | 247 | $ rm "$TESTTMP"/extroot/foo.* |
|
248 | $ rm -Rf "$TESTTMP/extroot/__pycache__" | |
|
248 | 249 | $ cat > $TESTTMP/extroot/foo.py <<EOF |
|
249 | 250 | > # test relative import |
|
250 | 251 | > buf = [] |
@@ -1238,6 +1239,7 empty declaration of supported version, | |||
|
1238 | 1239 | If the extension specifies a buglink, show that: |
|
1239 | 1240 | $ echo 'buglink = "http://example.com/bts"' >> throw.py |
|
1240 | 1241 | $ rm -f throw.pyc throw.pyo |
|
1242 | $ rm -Rf __pycache__ | |
|
1241 | 1243 | $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*' |
|
1242 | 1244 | ** Unknown exception encountered with possibly-broken third-party extension throw |
|
1243 | 1245 | ** which supports versions unknown of Mercurial. |
@@ -1253,6 +1255,7 If the extensions declare outdated versi | |||
|
1253 | 1255 | $ echo "testedwith = '1.9.3'" >> older.py |
|
1254 | 1256 | $ echo "testedwith = '2.1.1'" >> throw.py |
|
1255 | 1257 | $ rm -f throw.pyc throw.pyo |
|
1258 | $ rm -Rf __pycache__ | |
|
1256 | 1259 | $ hg --config extensions.throw=throw.py --config extensions.older=older.py \ |
|
1257 | 1260 | > throw 2>&1 | egrep '^\*\*' |
|
1258 | 1261 | ** Unknown exception encountered with possibly-broken third-party extension older |
@@ -1266,6 +1269,7 If the extensions declare outdated versi | |||
|
1266 | 1269 | One extension only tested with older, one only with newer versions: |
|
1267 | 1270 | $ echo "util.version = lambda:'2.1'" >> older.py |
|
1268 | 1271 | $ rm -f older.pyc older.pyo |
|
1272 | $ rm -Rf __pycache__ | |
|
1269 | 1273 | $ hg --config extensions.throw=throw.py --config extensions.older=older.py \ |
|
1270 | 1274 | > throw 2>&1 | egrep '^\*\*' |
|
1271 | 1275 | ** Unknown exception encountered with possibly-broken third-party extension older |
@@ -1279,6 +1283,7 One extension only tested with older, on | |||
|
1279 | 1283 | Older extension is tested with current version, the other only with newer: |
|
1280 | 1284 | $ echo "util.version = lambda:'1.9.3'" >> older.py |
|
1281 | 1285 | $ rm -f older.pyc older.pyo |
|
1286 | $ rm -Rf __pycache__ | |
|
1282 | 1287 | $ hg --config extensions.throw=throw.py --config extensions.older=older.py \ |
|
1283 | 1288 | > throw 2>&1 | egrep '^\*\*' |
|
1284 | 1289 | ** Unknown exception encountered with possibly-broken third-party extension throw |
@@ -1305,6 +1310,7 Declare the version as supporting this h | |||
|
1305 | 1310 | > echo "unable to fetch a mercurial version. Make sure __version__ is correct"; |
|
1306 | 1311 | > fi |
|
1307 | 1312 | $ rm -f throw.pyc throw.pyo |
|
1313 | $ rm -Rf __pycache__ | |
|
1308 | 1314 | $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*' |
|
1309 | 1315 | ** unknown exception encountered, please report by visiting |
|
1310 | 1316 | ** https://mercurial-scm.org/wiki/BugTracker |
@@ -1316,6 +1322,7 Patch version is ignored during compatib | |||
|
1316 | 1322 | $ echo "testedwith = '3.2'" >> throw.py |
|
1317 | 1323 | $ echo "util.version = lambda:'3.2.2'" >> throw.py |
|
1318 | 1324 | $ rm -f throw.pyc throw.pyo |
|
1325 | $ rm -Rf __pycache__ | |
|
1319 | 1326 | $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*' |
|
1320 | 1327 | ** unknown exception encountered, please report by visiting |
|
1321 | 1328 | ** https://mercurial-scm.org/wiki/BugTracker |
@@ -1326,6 +1333,7 Patch version is ignored during compatib | |||
|
1326 | 1333 | Test version number support in 'hg version': |
|
1327 | 1334 | $ echo '__version__ = (1, 2, 3)' >> throw.py |
|
1328 | 1335 | $ rm -f throw.pyc throw.pyo |
|
1336 | $ rm -Rf __pycache__ | |
|
1329 | 1337 | $ hg version -v |
|
1330 | 1338 | Mercurial Distributed SCM (version *) (glob) |
|
1331 | 1339 | (see https://mercurial-scm.org for more information) |
@@ -1350,6 +1358,7 Test version number support in 'hg versi | |||
|
1350 | 1358 | throw external 1.2.3 |
|
1351 | 1359 | $ echo 'getversion = lambda: "1.twentythree"' >> throw.py |
|
1352 | 1360 | $ rm -f throw.pyc throw.pyo |
|
1361 | $ rm -Rf __pycache__ | |
|
1353 | 1362 | $ hg version -v --config extensions.throw=throw.py --config extensions.strip= |
|
1354 | 1363 | Mercurial Distributed SCM (version *) (glob) |
|
1355 | 1364 | (see https://mercurial-scm.org for more information) |
@@ -1674,7 +1683,7 Make sure a broken uisetup doesn't globa | |||
|
1674 | 1683 | |
|
1675 | 1684 | Even though the extension fails during uisetup, hg is still basically usable: |
|
1676 | 1685 | $ hg version |
|
1677 |
*** failed to set up extension baduisetup: No module named |
|
|
1686 | \*\*\* failed to set up extension baduisetup: No module named (mercurial\.)?bdiff (re) | |
|
1678 | 1687 |
|
|
1679 | 1688 | (see https://mercurial-scm.org for more information) |
|
1680 | 1689 | |
@@ -1696,8 +1705,8 Even though the extension fails during u | |||
|
1696 | 1705 | mod = _hgextimport(_origimport, head, globals, locals, None, level) |
|
1697 | 1706 | File "*/hgdemandimport/demandimportpy2.py", line *, in _hgextimport (glob) |
|
1698 | 1707 | return importfunc(name, globals, *args, **kwargs) |
|
1699 |
ImportError: No module named |
|
|
1700 |
*** failed |
|
|
1708 | ImportError: No module named (mercurial\.)?bdiff (re) | |
|
1709 | \*\*\* failed to set up extension baduisetup: No module named (mercurial\.)?bdiff (re) | |
|
1701 | 1710 |
|
|
1702 | 1711 | (see https://mercurial-scm.org for more information) |
|
1703 | 1712 |
@@ -152,6 +152,7 | |||
|
152 | 152 | $ hg commit -Aqm 'fail+base64+gzip+noop' |
|
153 | 153 | abort: missing processor for flag '0x1'! |
|
154 | 154 | [255] |
|
155 | $ rm fail-base64-gzip-noop | |
|
155 | 156 | |
|
156 | 157 | # TEST: ensure we cannot register several flag processors on the same flag |
|
157 | 158 |
$ |
@@ -159,11 +160,11 | |||
|
159 | 160 |
> extension=$ |
|
160 | 161 |
> duplicate=$ |
|
161 | 162 | > EOF |
|
162 | $ echo 'this should fail' > file | |
|
163 | $ hg commit -Aqm 'add file' | |
|
163 | $ hg debugrebuilddirstate | |
|
164 | 164 | *** failed to set up extension duplicate: cannot register multiple processors on flag '0x8'. |
|
165 | abort: missing processor for flag '0x1'! | |
|
166 | [255] | |
|
165 | $ hg st 2>&1 | egrep 'cannot register multiple processors|flagprocessorext' | |
|
166 | *** failed to set up extension duplicate: cannot register multiple processors on flag '0x8'. | |
|
167 | File "*/tests/flagprocessorext.py", line *, in b64decode (glob) | |
|
167 | 168 | |
|
168 | 169 | $ cd .. |
|
169 | 170 |
@@ -80,6 +80,34 We can control the pager from the config | |||
|
80 | 80 | paged! 'summary: modify a 10\n' |
|
81 | 81 | paged! '\n' |
|
82 | 82 | |
|
83 | explicit --pager=on should take precedence over other configurations | |
|
84 | (issue5580) | |
|
85 | ||
|
86 | $ cat >> $HGRCPATH <<EOF | |
|
87 | > [ui] | |
|
88 | > paginate = false | |
|
89 | > EOF | |
|
90 | $ hg log --limit 1 --pager=on | |
|
91 | paged! 'changeset: 10:46106edeeb38\n' | |
|
92 | paged! 'tag: tip\n' | |
|
93 | paged! 'user: test\n' | |
|
94 | paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | |
|
95 | paged! 'summary: modify a 10\n' | |
|
96 | paged! '\n' | |
|
97 | ||
|
98 | $ cat >> $HGRCPATH <<EOF | |
|
99 | > [ui] | |
|
100 | > # true is default value of ui.paginate | |
|
101 | > paginate = true | |
|
102 | > EOF | |
|
103 | $ hg log --limit 1 --pager=off | |
|
104 | changeset: 10:46106edeeb38 | |
|
105 | tag: tip | |
|
106 | user: test | |
|
107 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
108 | summary: modify a 10 | |
|
109 | ||
|
110 | ||
|
83 | 111 | We can enable the pager on id: |
|
84 | 112 | |
|
85 | 113 | BROKEN: should be paged |
@@ -312,6 +312,7 of which length of byte sequence and col | |||
|
312 | 312 | from each other. |
|
313 | 313 | |
|
314 | 314 | $ rm -f loop.pyc |
|
315 | $ rm -Rf __pycache__ | |
|
315 | 316 | $ cat >> loop.py <<EOF |
|
316 | 317 | > # use non-ascii characters as loop items of progress |
|
317 | 318 | > loopitems = [ |
@@ -144,12 +144,18 def lowlevelcopy(rlog, tr, destname=b'_d | |||
|
144 | 144 | text = None |
|
145 | 145 | cachedelta = (deltaparent, rlog.revdiff(deltaparent, r)) |
|
146 | 146 | flags = rlog.flags(r) |
|
147 | ifh = dlog.opener(dlog.indexfile, 'a+') | |
|
148 | dfh = None | |
|
149 | if not dlog._inline: | |
|
150 | dfh = dlog.opener(dlog.datafile, 'a+') | |
|
151 | dlog._addrevision(rlog.node(r), text, tr, r, p1, p2, flags, cachedelta, | |
|
152 | ifh, dfh) | |
|
147 | ifh = dfh = None | |
|
148 | try: | |
|
149 | ifh = dlog.opener(dlog.indexfile, 'a+') | |
|
150 | if not dlog._inline: | |
|
151 | dfh = dlog.opener(dlog.datafile, 'a+') | |
|
152 | dlog._addrevision(rlog.node(r), text, tr, r, p1, p2, flags, | |
|
153 | cachedelta, ifh, dfh) | |
|
154 | finally: | |
|
155 | if dfh is not None: | |
|
156 | dfh.close() | |
|
157 | if ifh is not None: | |
|
158 | ifh.close() | |
|
153 | 159 | return dlog |
|
154 | 160 | |
|
155 | 161 | # Utilities to generate revisions for testing |
@@ -14,10 +14,12 | |||
|
14 | 14 | $ rm .hg/hgrc |
|
15 | 15 | |
|
16 | 16 | $ HGUSER=`(echo foo; echo bar2)` hg ci -Am m |
|
17 | adding a | |
|
17 | 18 | abort: username 'foo\nbar2' contains a newline |
|
18 | 19 | |
|
19 | 20 | [255] |
|
20 | 21 | $ hg ci -Am m -u "`(echo foo; echo bar3)`" |
|
22 | adding a | |
|
21 | 23 | transaction abort! |
|
22 | 24 | rollback completed |
|
23 | 25 | abort: username 'foo\nbar3' contains a newline! |
General Comments 0
You need to be logged in to leave comments.
Login now