Thu, 07 May 2015 12:07:10 +0900 cmdutil: add class to restore dirstate during unexpected failure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 07 May 2015 12:07:10 +0900] rev 24991
cmdutil: add class to restore dirstate during unexpected failure Before this patch, after "dirstate.write()" execution, there was no way to restore dirstate to the original status before "dirstate.write()". In some code paths, "dirstate.invalidate()" is used as a kind of "restore .hg/dirstate to the original status", but it just avoids writing changes in memory out, and doesn't actually restore the ".hg/dirstate" file. To fix the issue that the recent (in memory) dirstate isn't visible to external processes (e.g. "precommit" hooks), "dirstate.write()" should be invoked before invocation of external processes. But at the same time, ".hg/dirstate" should be restored to its content before "dirstate.write()" during an unexpected failure in some cases. This patch adds the class "dirstateguard" to easily restore ".hg/dirstate" during unexpected failures. Typical usecase of it is: # (1) build dirstate up .... # (2) write dirstate out, and backup ".hg/dirstate" dsguard = dirstateguard(repo, 'scopename') try: # (3) execute somethig to do: # this may imply making some additional changes on dirstate .... # (4) unlink backed-up dirstate file at the end of dsguard scope dsguard.close() finally: # (5) if execution is aborted before "dsguard.close()", # ".hg/dirstate" is restored from the backup dsguard.release() For this kind of issue, an "extending transaction" approach (in https://titanpad.com/mercurial32-sprint) seems to not be suitable, because: - transaction nesting occurs in some cases (e.g. "shelve => rebase"), and - "dirstate" may be already modified since the beginning of OUTER transaction scope, then - dirstate should be backed up into the file other than "dirstate.journal" at the beginning of INNER transaction scope, but - such alternative backup files are useless for transaction itself, and increases complication of its implementation "transaction" and "dirstateguard" differ from each other also in "what it should do for .hg/dirstate" in cases other than success. ============== ======= ======== ============= type success fail "hg rollback" ============== ======= ======== ============= transaction keep keep restore dirstateguard keep restore (not implied) ============== ======= ======== ============= Some collaboration between transaction and dirstate will probably be introduced in the future. But this layer is needed in all cases.
Sun, 10 May 2015 14:45:13 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Sun, 10 May 2015 14:45:13 -0500] rev 24990
merge with stable
Sat, 09 May 2015 16:06:04 -0500 wix: add new json templates folder to MSI installers
Steve Borho <steve@borho.org> [Sat, 09 May 2015 16:06:04 -0500] rev 24989
wix: add new json templates folder to MSI installers
Mon, 04 May 2015 10:03:13 +0900 templater: rename parsestring() to unquotestring() (API)
Yuya Nishihara <yuya@tcha.org> [Mon, 04 May 2015 10:03:13 +0900] rev 24988
templater: rename parsestring() to unquotestring() (API) Since db7463aa080f, it doesn't parse string escapes.
Mon, 04 May 2015 10:01:03 +0900 templater: remove noop calls of parsestring(s, quoted=False) (API)
Yuya Nishihara <yuya@tcha.org> [Mon, 04 May 2015 10:01:03 +0900] rev 24987
templater: remove noop calls of parsestring(s, quoted=False) (API) Since db7463aa080f, parsestring(s, quoted=False) just returns s.
Tue, 14 Apr 2015 12:45:15 -0700 bookmarks: simplify iscurrent to isactivewdirparent (API)
Ryan McElroy <rmcelroy@fb.com> [Tue, 14 Apr 2015 12:45:15 -0700] rev 24986
bookmarks: simplify iscurrent to isactivewdirparent (API) Previously this function accepted two optional parameters that were unused by any callers and complicated the function. Today, the terms 'active' and 'current' are interchangeably used throughout the codebase in reference to the active bookmark (the bookmark that will be updated with the next commit). This leads to confusion among developers and users. This patch is part of a series to standardize the usage to 'active' throughout the mercurial codebase and user interface.
Tue, 05 May 2015 14:45:09 -0400 tests: add a new commit to test-commandline-template
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 05 May 2015 14:45:09 -0400] rev 24985
tests: add a new commit to test-commandline-template This commit modifies, adds, renames, removes files all at once. It will be mostly interesting for an upcoming test relating to the status log template.
Thu, 07 May 2015 23:25:13 -0700 run-tests: spread and document the content of time tuple
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 07 May 2015 23:25:13 -0700] rev 24984
run-tests: spread and document the content of time tuple The spreading will make future modification clearer. The documentation improve code readability.
Thu, 07 May 2015 23:16:57 -0700 run-tests: when building json, get time data in the same order as elsewhere
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 07 May 2015 23:16:57 -0700] rev 24983
run-tests: when building json, get time data in the same order as elsewhere The json code was changing the order of the time tuple for unclear reasons. We now use the same order as everywhere else.
Thu, 07 May 2015 20:45:51 -0700 run-tests: stop explicit expansion of time data
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 07 May 2015 20:45:51 -0700] rev 24982
run-tests: stop explicit expansion of time data We are about to record more complex time-related data, which will require repeated changes of every loop touching times data. That will also extend such lines to a point where things become too long. Instead, we iterate on each entry and expand values in the loops. We keep intermediate variables in most cases to preserve readability. The loop producing json data does a strange inversion for no obvious reason. We preserved that for now and will fix it in another changeset.
Fri, 08 May 2015 10:51:18 -0700 run-tests: refactor json entry creation logic
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 08 May 2015 10:51:18 -0700] rev 24981
run-tests: refactor json entry creation logic We are about to add more timing related information to each entry. Having a single place where the json entry is created is going to be much simpler.
Thu, 07 May 2015 23:20:24 -0700 run-tests: when building json, use result.failures instead of result.faildata
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 07 May 2015 23:20:24 -0700] rev 24980
run-tests: when building json, use result.failures instead of result.faildata It is unclear to me why 'faildata' was used. Let's use the same kind of attribute as for the other groups.
Fri, 08 May 2015 19:32:11 -0700 run-test: add a test for json output when -i is used
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 08 May 2015 19:32:11 -0700] rev 24979
run-test: add a test for json output when -i is used The -i can apparently confused some internal data structure, we want to make sure we do not regress.
Thu, 30 Apr 2015 16:45:03 -0700 changegroup: drop _changelog and _manifest properties
Martin von Zweigbergk <martinvonz@google.com> [Thu, 30 Apr 2015 16:45:03 -0700] rev 24978
changegroup: drop _changelog and _manifest properties We already have a _repo property on the packer, and we only access the changelog and manifest revlog in one place, so it's just as easy to get them from self._repo.
Wed, 29 Apr 2015 13:25:07 -0700 changegroup: document the cases where reordering complicates linkrevs
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Apr 2015 13:25:07 -0700] rev 24977
changegroup: document the cases where reordering complicates linkrevs
Wed, 29 Apr 2015 10:34:28 -0700 changegroup: extract condition for linkrev fastpath
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Apr 2015 10:34:28 -0700] rev 24976
changegroup: extract condition for linkrev fastpath The condition for taking the fastpath (or not) is used in two places. By extracting it, we also provide a place to document what it's about.
Sun, 12 Apr 2015 07:14:53 -0700 lazymanifest: drop SP before some labels
Martin von Zweigbergk <martinvonz@google.com> [Sun, 12 Apr 2015 07:14:53 -0700] rev 24975
lazymanifest: drop SP before some labels These seem to be the only occurrences in our code base, so let's make it consistent.
Sun, 12 Apr 2015 07:12:39 -0700 lazymanifest: avoid 'bail' label when used on success path
Martin von Zweigbergk <martinvonz@google.com> [Sun, 12 Apr 2015 07:12:39 -0700] rev 24974
lazymanifest: avoid 'bail' label when used on success path 3d485727e45e (lazymanifest: extract function for iterating to next line, 2015-03-11) introduced a large memory leak because I stopped running the 'bail' block in the successful case. Let's rename 'bail' to 'done', since it has to run not only in the error case.
Wed, 06 May 2015 13:15:39 -0400 dockerdeb: rules to build a debian package using docker
Augie Fackler <augie@google.com> [Wed, 06 May 2015 13:15:39 -0400] rev 24973
dockerdeb: rules to build a debian package using docker Currently only supports jessie (current stable), but other version should be trivial.
Thu, 07 May 2015 10:28:58 -0400 packaging: extract packagelib for common code from builddeb and buildrpm
Augie Fackler <augie@google.com> [Thu, 07 May 2015 10:28:58 -0400] rev 24972
packaging: extract packagelib for common code from builddeb and buildrpm
Wed, 06 May 2015 13:13:54 -0400 builddeb: new script for building a deb package
Augie Fackler <augie@google.com> [Wed, 06 May 2015 13:13:54 -0400] rev 24971
builddeb: new script for building a deb package Future work will allow us to use docker to build debs. Right now this doesn't install any config files. I plan to do that as a followup, but getting something basic and working checked in seems like more of a priority than getting everything done in one big step. This also does not create a source deb yet. I haven't looked into that process. Note that this declares incompatibility with the `mercurial-common` package. It's typical for debian packages to be split between architecture-independent bits and native bits, meaning the python bits downstream live in mercurial-common and the c extension bits live in mercurial. We don't do that because we want to (ideally) give users a single deb file to install.
Wed, 06 May 2015 14:36:17 -0400 dockerlib: fix initcontainer for boot2docker users
Augie Fackler <augie@google.com> [Wed, 06 May 2015 14:36:17 -0400] rev 24970
dockerlib: fix initcontainer for boot2docker users This allows me to build rpm packages using boot2docker on my Mac. It's probably a very fragile hack, but it seems to work well enough for now that I felt it was worth sharing.
Wed, 06 May 2015 10:45:51 -0400 dockerlib: extract initcontainer() method
Augie Fackler <augie@google.com> [Wed, 06 May 2015 10:45:51 -0400] rev 24969
dockerlib: extract initcontainer() method This helps contain all the logic around creating containers.
Wed, 06 May 2015 10:45:07 -0400 dockerlib: start extracting common functions for setting up docker
Augie Fackler <augie@google.com> [Wed, 06 May 2015 10:45:07 -0400] rev 24968
dockerlib: start extracting common functions for setting up docker I'm about to start interacting with docker for Debian packaging too, so it's time to centralize this so that any bugfixes I figure out apply to both codepaths.
Thu, 07 May 2015 17:14:00 -0700 run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 07 May 2015 17:14:00 -0700] rev 24967
run-test: ensure the test ports are available before launching test I'm running into a systematic issue because there is always some port taken in the 1500-wide range of ports used by the test (3 for each test file).
Fri, 08 May 2015 18:11:26 +0900 templater: strip single backslash before quotation mark in quoted template
Yuya Nishihara <yuya@tcha.org> [Fri, 08 May 2015 18:11:26 +0900] rev 24966
templater: strip single backslash before quotation mark in quoted template db7463aa080f fixed the issue of double escapes, but it made the following template fail with syntax error because of <\">. Strictly speaking, <\"> appears to be invalid in non-string part, but we are likely to escape <"> if surrounded by quotes, and we are used to write such templates by trial and error. [templates] sl = "{tags % \"{ifeq(tag,'tip','',label('log.tag', ' {tag}'))}\"}" So, for backward compatibility between 2.8.1 and 3.4, a single backslash before quotation mark is stripped only in quoted template. We don't care for <\"> in string literal in quoted template, which never worked as expected before. template result --------- ------------------------ {\"\"} parse error "{""}" {""} -> <> "{\"\"}" {""} -> <> {"\""} {"\""} -> <"> '{"\""}' {"\""} -> <"> "{"\""}" parse error (don't care)
Thu, 07 May 2015 23:18:48 -0700 run-tests: implement Test._testMethodName
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 07 May 2015 23:18:48 -0700] rev 24965
run-tests: implement Test._testMethodName This methods is needed internally by utilities like __repr__. I do not see any harm in having it declared. Any actual attempt to use it to call a test would crash, but at least random debug print in the test runner will no longer crash. Another approach would have been to redefine the __repr__ function, but I think it a good thing to have some respect for the base class API.
Thu, 07 May 2015 16:43:58 -0700 test-subrepo-git: ignore pax_global_header when listing archive
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 07 May 2015 16:43:58 -0700] rev 24964
test-subrepo-git: ignore pax_global_header when listing archive 5115d03440f4 is adding a new tar call but forgot to filter out the pax_global_header file that some tar versions write. This is similar to what happened in 5dda6c708138.
Thu, 07 May 2015 14:57:02 -0700 test-subrepo-recursion: glob out all the date listed by unzip -l
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 07 May 2015 14:57:02 -0700] rev 24963
test-subrepo-recursion: glob out all the date listed by unzip -l This date output is unstable (01-01-1980 vs 1980-01-01). As the test is not about the modification date, we glob the data out. Caught by buildbot.
Tue, 14 Apr 2015 13:31:50 -0700 bookmarks: remove unused updatecurrentbookmark function (API)
Ryan McElroy <rmcelroy@fb.com> [Tue, 14 Apr 2015 13:31:50 -0700] rev 24962
bookmarks: remove unused updatecurrentbookmark function (API) This function was not used anywhere in core and there is no indication that it is used elsewhere either.
Sun, 10 May 2015 11:39:01 -0500 changelog: drop unnecessary override of "hasnode"
Yuya Nishihara <yuya@tcha.org> [Sun, 10 May 2015 11:39:01 -0500] rev 24961
changelog: drop unnecessary override of "hasnode" revlog.hasnode() calls self.rev(node) that takes filtering into account.
Fri, 08 May 2015 11:32:24 -0700 test-run-test: unset run-test specific environment variables stable
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 08 May 2015 11:32:24 -0700] rev 24960
test-run-test: unset run-test specific environment variables Otherwise variable set for the real test run interfere with the test runner tests.
Fri, 01 May 2015 15:45:07 -0700 histedit: fix --continue when rules are finished stable
Durham Goode <durham@fb.com> [Fri, 01 May 2015 15:45:07 -0700] rev 24959
histedit: fix --continue when rules are finished If histedit failed after all the rules were complete (for instance, if there was an exception in the cleanup phase), you couldn't --continue because it was unable to pop a rule. Let's just skip the rule execution phase of --continue if there are no more rules.
Fri, 01 May 2015 15:28:47 -0700 histedit: fix serializing of None backupfile stable
Durham Goode <durham@fb.com> [Fri, 01 May 2015 15:28:47 -0700] rev 24958
histedit: fix serializing of None backupfile If the histedit backupfile was None (like if evolve is enabled) it would get serialized as 'None' into the state file. Later if the histedit was aborted and the top most commit was unreachable (ex: if it was obsolete or stripped), histedit would try to unbundle the backupfile and try to read .hg/None. This fixes it to not serialize None. Since it only happens with evolve, I'm not sure how to add test coverage here.
Thu, 07 May 2015 14:19:20 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 07 May 2015 14:19:20 -0500] rev 24957
merge with stable
Tue, 05 May 2015 08:40:59 -0700 treemanifest: set requires at repo creation time, ignore config after
Martin von Zweigbergk <martinvonz@google.com> [Tue, 05 May 2015 08:40:59 -0700] rev 24956
treemanifest: set requires at repo creation time, ignore config after The very next changeset will start writing one revlog per directory when tree manifests are enabled. That is backwards incompatible, so it requires .hg/requires to be updated. Just like with generaldelta, we want to update .hg/requires only when the repo is created. Updating ..hg/requires is bad for repos on shared disk. Instead, those who do want to upgrade a repo to using treemanifest (or manifestv2, etc) can run hg clone --config experimental.treemanifest repo clone which will create a new repo with the requirement set. Unlike the case of e.g. generaldelta, it will not rewrite the changesets, since tree manifests hash differently.
Tue, 21 Apr 2015 09:29:59 -0700 remove: use ctx.hasdir(f) instead of 'f in ctx.dirs()'
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Apr 2015 09:29:59 -0700] rev 24955
remove: use ctx.hasdir(f) instead of 'f in ctx.dirs()' This speeds up 'hg remove python/README' on the Firefox repo from 2.479s to 0.664s with lazily loaded treemanifests (which is not yet in core) and has no measurable effect on flat manifests.
Mon, 04 May 2015 23:04:12 -0400 largefiles: drop os.path.join() in subrepo archive override
Matt Harbison <matt_harbison@yahoo.com> [Mon, 04 May 2015 23:04:12 -0400] rev 24954
largefiles: drop os.path.join() in subrepo archive override This is related to 41cd8171e58f, but not required for that to function correctly because 'prefix' always ends with '/', so os.path.join(prefix, _path) simply concatenates the strings. Take the opportunity to drop the os.path usage, and avoid confusion by using the same pattern as the overridden subrepo method.
Tue, 05 May 2015 20:52:38 -0400 archive: drop the leading '.' path component from the prefix (issue4634)
Matt Harbison <matt_harbison@yahoo.com> [Tue, 05 May 2015 20:52:38 -0400] rev 24953
archive: drop the leading '.' path component from the prefix (issue4634) Unix utilities like tar will happily prefix the files it packs with './', but annoyingly, Windows Explorer will not show these packed files when it opens the archive. Since there doesn't seem to be a point in including './' in the path names, just drop it. The default 'hg archive' prefix is the basename of the archive, so specifying '.' allows for that default to be disabled completely.
Thu, 07 May 2015 07:46:39 +0900 hgweb: bring back infinite scroll in shortlog of paper style stable
Yuya Nishihara <yuya@tcha.org> [Thu, 07 May 2015 07:46:39 +0900] rev 24952
hgweb: bring back infinite scroll in shortlog of paper style Since fdf7794be41d, column headers are wrapped by <thead> element, so the first and only <tbody> contains changelog data. I got the following error without this patch: Uncaught TypeError: Cannot read property 'lastElementChild' of null scrollHandler @ mercurial.js:375
Thu, 07 May 2015 13:47:45 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 07 May 2015 13:47:45 -0500] rev 24951
merge with stable
Wed, 06 May 2015 09:52:10 -0700 extensions: clear aftercallbacks after execution (issue4646) stable
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 06 May 2015 09:52:10 -0700] rev 24950
extensions: clear aftercallbacks after execution (issue4646) It was reported that enabling pager without color could cause a hang. Inserting print statements revealed that the callbacks in extensions._aftercallbacks were being invoked twice. extensions.loadall can be called multiple times. If entries in extensions._aftercallbacks linger between calls, this could result in double execution of the callbacks. This can lead to unwanted behavior. The reproduce steps in the bug seem to only occur when the output of a command is less than the size of the current screen. This is not something that can easily be tested. I verified the test case works with this patch and that pager and color interaction continues to work. Since we have no existing automated tests for pager, this sadly appears to be the best testing I can do.
Mon, 04 May 2015 10:17:34 +0900 templater: strictly parse leading backslashes of '{' (issue4569) (BC) stable
Yuya Nishihara <yuya@tcha.org> [Mon, 04 May 2015 10:17:34 +0900] rev 24949
templater: strictly parse leading backslashes of '{' (issue4569) (BC) Because double backslashes are processed as a string escape sequence, '\\{' should start the template syntax. On the other hand, r'' disables any sort of \-escapes, so r'\{' can go either way, never start the template syntax or always start it. I simply chose the latter, which means r'\{' is the same as '\\{'.
Mon, 04 May 2015 09:54:01 +0900 templater: do not process \-escapes at parsestring() (issue4290) stable
Yuya Nishihara <yuya@tcha.org> [Mon, 04 May 2015 09:54:01 +0900] rev 24948
templater: do not process \-escapes at parsestring() (issue4290) This patch brings back pre-2.8.1 behavior. The result of parsestring() is stored in templater's cache, t.cache, and then it is parsed as a template string by compiletemplate(). So t.cache should keep an unparsed string no matter if it is sourced from config value. Otherwise backslashes would be processed twice. The test vector is borrowed from 64b4f0cd7336.
Tue, 14 Apr 2015 13:17:33 -0700 bookmarks: rename bookmarkcurrent to activebookmark (API)
Ryan McElroy <rmcelroy@fb.com> [Tue, 14 Apr 2015 13:17:33 -0700] rev 24947
bookmarks: rename bookmarkcurrent to activebookmark (API) Today, the terms 'active' and 'current' are interchangeably used throughout the codebase in reference to the active bookmark (the bookmark that will be updated with the next commit). This leads to confusion among developers and users. This patch is part of a series to standardize the usage to 'active' throughout the mercurial codebase and user interface.
Mon, 13 Apr 2015 23:03:13 -0700 bookmarks: rename readcurrent to readactive (API)
Ryan McElroy <rmcelroy@fb.com> [Mon, 13 Apr 2015 23:03:13 -0700] rev 24946
bookmarks: rename readcurrent to readactive (API) Today, the terms 'active' and 'current' are interchangeably used throughout the codebase in reference to the active bookmark (the bookmark that will be updated with the next commit). This leads to confusion among developers and users. This patch is part of a series to standardize the usage to 'active' throughout the mercurial codebase and user interface.
Mon, 13 Apr 2015 22:27:01 -0700 bookmarks: rename setcurrent to activate (API)
Ryan McElroy <rmcelroy@fb.com> [Mon, 13 Apr 2015 22:27:01 -0700] rev 24945
bookmarks: rename setcurrent to activate (API) Today, the terms 'active' and 'current' are interchangeably used throughout the codebase in reference to the active bookmark (the bookmark that will be updated with the next commit). This leads to confusion among developers and users. This patch is part of a series to standardize the usage to 'active' throughout the mercurial codebase and user interface.
Mon, 13 Apr 2015 21:53:37 -0700 bookmarks: rename unsetcurrent to deactivate (API)
Ryan McElroy <rmcelroy@fb.com> [Mon, 13 Apr 2015 21:53:37 -0700] rev 24944
bookmarks: rename unsetcurrent to deactivate (API) Today, the terms 'active' and 'current' are interchangeably used throughout the codebase in reference to the active bookmark (the bookmark that will be updated with the next commit). This leads to confusion among developers and users. This patch is part of a series to standardize the usage to 'active' throughout the mercurial codebase and user interface.
Wed, 06 May 2015 17:15:38 +0200 subrepo: correctly handle git subdirectory status change
Mathias De Maré <mathias.demare@gmail.com> [Wed, 06 May 2015 17:15:38 +0200] rev 24943
subrepo: correctly handle git subdirectory status change 'git diff-index' by default does not recurse into subdirectories when changes are found. As a result, the directory is shown as changed, rather than the files in this directory. Adding '-r' results in recursing until the blobs themselves are checked.
Wed, 06 May 2015 16:56:28 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Wed, 06 May 2015 16:56:28 -0500] rev 24942
merge with stable
Sun, 12 Apr 2015 15:36:10 -0400 setup: hide octal literals inside strings so they're portable (issue4554)
Augie Fackler <augie@google.com> [Sun, 12 Apr 2015 15:36:10 -0400] rev 24941
setup: hide octal literals inside strings so they're portable (issue4554)
Wed, 26 Mar 2014 15:55:50 -0700 revset: avoid returning duplicates when returning ancestors
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 15:55:50 -0700] rev 24940
revset: avoid returning duplicates when returning ancestors Before this patch, _revancestors were giving false result when a revision was duplicated in the input. Duplicated entry are rare but may happen when using the `%lx` notation internally. This series has no visible impact on the performance of the function according to benchmark.
Wed, 26 Mar 2014 16:21:30 -0700 revset: use an iterator instead of a dequeue in ancestors()
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 16:21:30 -0700] rev 24939
revset: use an iterator instead of a dequeue in ancestors() The dequeue was actually just used to be able to pop value one at a time. Building the dequeue means we are reading all the input value at once at the beginning of the evaluation. This defeat the lazyness of revset. We replace the deque with iterator usage for the sake of simplicity and lazyness. This provide massive speedup to get the first result if the input set is big max(::all()) before) wall 0.001917 comb 0.000000 user 0.000000 sys 0.000000 (best of 1115) after) wall 0.000107 comb 0.000000 user 0.000000 sys 0.000000 (best of 22222)
Wed, 06 May 2015 11:29:09 -0700 revset: return early when revs is empty
Martin von Zweigbergk <martinvonz@google.com> [Wed, 06 May 2015 11:29:09 -0700] rev 24938
revset: return early when revs is empty By introducing an early return in _revancestors() when revs is empty, we make it so inputrev is never None, which simplifies the subsequent code.
Wed, 26 Mar 2014 16:14:30 -0700 revset: rename 'revsnode' to 'inputrev' in ancestors
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 16:14:30 -0700] rev 24937
revset: rename 'revsnode' to 'inputrev' in ancestors We usually use 'node' for variable containing 20 bytes hash. There is nothing nodish in this variable, so we rename it to "inputrev" as it old the next entry of the iteration.
Mon, 04 May 2015 12:36:48 -0700 revset: make generatorset.__nonzero__ lazy
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 04 May 2015 12:36:48 -0700] rev 24936
revset: make generatorset.__nonzero__ lazy The 'for r in self:' call could trigger full consumption of the generator while we only need a single value. We also fast path if a single value got already computed. See inline comment for more details. This provide massive speedup for lazy operation using boolean testing. max(::tip) e5b507efb36e) wall 0.055609 comb 0.060000 user 0.060000 sys 0.000000 (best of 100) after change) wall 0.000109 comb 0.000000 user 0.000000 sys 0.000000 (best of 19146)
Tue, 05 May 2015 15:33:01 -0700 tests: test that we can convert to manifestv2 with clone
Drew Gottlieb <drgott@google.com> [Tue, 05 May 2015 15:33:01 -0700] rev 24935
tests: test that we can convert to manifestv2 with clone This just adds a test to ensure that we can convert a manifestv1 repo to a manifestv2 repo (for future commits only) by means of a local clone.
Mon, 13 Apr 2015 18:11:47 -0400 requires: move requires file writing func from localrepo to scmutil
Drew Gottlieb <drgott@google.com> [Mon, 13 Apr 2015 18:11:47 -0400] rev 24934
requires: move requires file writing func from localrepo to scmutil The logic to read a requires file resides in scmutil, so it's only logical that the logic to write the file should be there too. And now I've typed logic too many times it no longer looks like a word. Logically.
Tue, 05 May 2015 11:15:17 -0700 histedit: fix test-histedit-edit on vfat stable
Durham Goode <durham@fb.com> [Tue, 05 May 2015 11:15:17 -0700] rev 24933
histedit: fix test-histedit-edit on vfat test-histedit-edit was broken because it relied on the HGEDITOR script being executable. Instead, lets just execute 'sh' and pass it the script to run. This seems to be the pattern followed in other tests.
Sun, 03 May 2015 12:28:15 -0400 revset: don't error out if tokens parse as existing symbols
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Sun, 03 May 2015 12:28:15 -0400] rev 24932
revset: don't error out if tokens parse as existing symbols It makes perfect sense for tokens to parse as existing revset symbols (revset functions), and doesn't break anything, since parsing symbols as functions works correctly in the presence of parens. For example, if "only" is a bookmark, this used to error out, hg log -r "only(only, @)" which shouldn't, as the inner "only" is unambiguously not a function. So we just remove the symbolset function and replace its calling site with the stringset function. For the tests, we confirm that "date" and "only" are both parsed as revision names both inside revset expressions (e.g. an expression containing ::) and inside old-style revision expressions (e.g. those containing the name of the revision alone).
Tue, 05 May 2015 12:33:26 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 05 May 2015 12:33:26 -0500] rev 24931
merge with stable
Sun, 26 Apr 2015 13:43:01 -0400 test-command-template: minor clarification in comment
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Sun, 26 Apr 2015 13:43:01 -0400] rev 24930
test-command-template: minor clarification in comment
Tue, 28 Apr 2015 15:29:15 -0400 test-command-template: test the phase template more precisely
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 28 Apr 2015 15:29:15 -0400] rev 24929
test-command-template: test the phase template more precisely The current test that greps for "phase:" only checks that the word "phase" is in the output, but does not test that nothing else gets added by this template. This improves these tests by showing a unified
Tue, 28 Apr 2015 16:51:23 -0700 obsolete: speed up unstable computation
Laurent Charignon <lcharignon@fb.com> [Tue, 28 Apr 2015 16:51:23 -0700] rev 24928
obsolete: speed up unstable computation Speed up the computation of the unstable revset by using the not public() revset. In another series of patches, we optimize the not public() revset and together it leads to a 50-100x speedup on the computation of unstable() for our big repos.
Fri, 24 Apr 2015 14:46:30 -0700 obsolete: speed up computation of bumped revset
Laurent Charignon <lcharignon@fb.com> [Fri, 24 Apr 2015 14:46:30 -0700] rev 24927
obsolete: speed up computation of bumped revset Speed up the computation of the bumped revset by using the not public() revset. In another patch series, we optimized the not public() revset. Together, this cuts the cost of the computation of bumped() from 17% of the total time of smartlog on our big repo to under 0.1% of the total time.
Thu, 19 Mar 2015 13:15:20 -0700 run-test: include test name in the return vlog
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 19 Mar 2015 13:15:20 -0700] rev 24926
run-test: include test name in the return vlog Otherwise using --verbose and --jobs gives useless output.
Tue, 28 Apr 2015 12:31:30 -0400 manifest: document return type of readfast()
Augie Fackler <augie@google.com> [Tue, 28 Apr 2015 12:31:30 -0400] rev 24925
manifest: document return type of readfast() I keep having to ponder out what readfast() means, and it always surprises me. Document the return type in the docstring so that future readers won't have to puzzle this out again.
Mon, 04 May 2015 22:33:29 -0400 archive: always use portable path component separators with subrepos stable
Matt Harbison <matt_harbison@yahoo.com> [Mon, 04 May 2015 22:33:29 -0400] rev 24924
archive: always use portable path component separators with subrepos The previous behavior when archiving a subrepo 's' on Windows was to internally name the file under it 's\file', due to the use of vfs.reljoin(). When printing the file list from the archive on Windows or Linux, the file was named 's\\file'. The archive extracted OK on Windows, but if the archive was brought to a Linux system, it created a file named 's\file' instead of a directory 's' containing 'file'. *.zip format achives seemed not to have the problem, but this was definitely an issue with *.tgz archives. Largefiles actually got this right, but a test is added to keep this from regressing. The subrepo-deep-nested-change.t test was repurposed to archive to a file, since there are several subsequent tests that archive to a directory. The output change is losing the filesystem prefix '../archive_lf' and not listing the directories 'sub1' and 'sub1/sub2'.
Sat, 11 Oct 2014 01:17:40 -0700 revset: narrow the subset using smartset operation in roots()
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 11 Oct 2014 01:17:40 -0700] rev 24923
revset: narrow the subset using smartset operation in roots() We were manually creating a base with explicit subset testing. We should let smartset magic happen and optimise that logic if needed. benchmark show some massive speedup when "parents set" is huge and "subset" is small. revset: 42:68 and roots(42:tip) 0) wall 0.011322 comb 0.010000 user 0.010000 sys 0.000000 (best of 161) 1) wall 0.002282 comb 0.010000 user 0.010000 sys 0.000000 (best of 1082) Minor speedup in simple case (were fullreposet helps) revset: roots(0::tip) 0) wall 0.095688 comb 0.100000 user 0.100000 sys 0.000000 (best of 85) 1) wall 0.084448 comb 0.080000 user 0.080000 sys 0.000000 (best of 95) revset: roots((0:tip)::) 0) wall 0.146752 comb 0.140000 user 0.140000 sys 0.000000 (best of 58) 1) wall 0.143538 comb 0.140000 user 0.140000 sys 0.000000 (best of 59) And small overhead then the "parents set" is fairly complicated (transforming it into a revset once and for all appears to be faster). revset: roots((tip~100::) - (tip~100::tip)) 0) wall 0.004652 comb 0.010000 user 0.010000 sys 0.000000 (best of 544) 1) wall 0.004878 comb 0.010000 user 0.010000 sys 0.000000 (best of 479) revset: roots((0::) - (0::tip)) 0) wall 0.146587 comb 0.150000 user 0.150000 sys 0.000000 (best of 53) 1) wall 0.157192 comb 0.160000 user 0.160000 sys 0.000000 (best of 53) revset: first(roots((0::) - (0::tip))) 0) wall 0.152924 comb 0.150000 user 0.150000 sys 0.000000 (best of 57) 1) wall 0.153192 comb 0.160000 user 0.160000 sys 0.000000 (best of 55)
Mon, 04 May 2015 10:38:45 -0700 context: make warning message for hidden revision extensible
Laurent Charignon <lcharignon@fb.com> [Mon, 04 May 2015 10:38:45 -0700] rev 24922
context: make warning message for hidden revision extensible Extensions might want to create new filternames and change what revisions are considered hidden or shown. This is the case for inhibit that enables direct access to hidden hashes with the visible-directaccess-nowarn filtername. By using startswith instead of a direct comparison with 'visible' we allow extensions to do that and not work directly on the 'visible' filtername used by core.
Sun, 03 May 2015 14:18:32 -0700 bundlerepo: remove unused 'repo' parameter
Martin von Zweigbergk <martinvonz@google.com> [Sun, 03 May 2015 14:18:32 -0700] rev 24921
bundlerepo: remove unused 'repo' parameter Revision 7c231754a621 (filelog: add file function to open other filelogs, 2011-05-10) added a _file() method to revlog, which also required a 'repo' parameter to be added to bundlefilelog's constructor. The _file() method was then removed in b95a5bb58653 (filelog: remove unused _file method, 2015-01-22), which made the constructor parameter unused, so let's remove that too.
Wed, 22 Apr 2015 15:53:03 -0700 histedit: fix --edit-plan stable
Durham Goode <durham@fb.com> [Wed, 22 Apr 2015 15:53:03 -0700] rev 24920
histedit: fix --edit-plan --edit-plan was completely broken from the command line because it used an old api that was not updated (it would crash with a stack trace). Let's update it and add tests to catch this.
Mon, 04 May 2015 13:15:15 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 04 May 2015 13:15:15 -0500] rev 24919
merge with stable
Wed, 22 Apr 2015 12:33:08 -0700 localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com> [Wed, 22 Apr 2015 12:33:08 -0700] rev 24918
localrepo: eliminate local requirements var in init Localrepo's __init__ function creates a local requirements set to add to before it replaces the instance's set with it. This is unnecessary, so let's just use the instance's set directly.
Wed, 22 Apr 2015 12:16:19 -0700 localrepo: rename requirements parameter in stream_in()
Drew Gottlieb <drgott@google.com> [Wed, 22 Apr 2015 12:16:19 -0700] rev 24917
localrepo: rename requirements parameter in stream_in() To avoid confusion from overloading of the variable name "requirements", the requirements is renamed to remotereqs for localrepo's stream_in() function.
Wed, 22 Apr 2015 12:59:12 -0700 localrepo: have stream_in() not modify its argument
Drew Gottlieb <drgott@google.com> [Wed, 22 Apr 2015 12:59:12 -0700] rev 24916
localrepo: have stream_in() not modify its argument Localrepo's stream_in function modified its requirements argument. This is not good practice because it may be unexpected behavior to the caller.
Wed, 22 Apr 2015 12:06:44 -0700 localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com> [Wed, 22 Apr 2015 12:06:44 -0700] rev 24915
localrepo: make _applyrequirements more specific Localrepo's _applyrequirements function isn't very straightforward about what it does. Its purpose is to both act as a setter for the requirements attribute, and to apply appropriate requirements to the opener's configuration. This change makes the function just focus on the latter responsibility. We rename it as such, and make setting the requirements attribute the responsibility of the caller.
Tue, 21 Apr 2015 17:16:10 -0700 localrepo: make requirements always be a set in localrepo.__init__
Drew Gottlieb <drgott@google.com> [Tue, 21 Apr 2015 17:16:10 -0700] rev 24914
localrepo: make requirements always be a set in localrepo.__init__ The init function used to create a local list, and then convert it to a set before assigning it as a data attribute. This change simplifies the function by having it always be a set, requiring no conversion.
Tue, 21 Apr 2015 16:55:30 -0700 localrepo: eliminate requirements class variable (API)
Drew Gottlieb <drgott@google.com> [Tue, 21 Apr 2015 16:55:30 -0700] rev 24913
localrepo: eliminate requirements class variable (API) Localrepo's requirements class variable was introduced in b090601a80d1 to make requirements modifiable by extensions. A main access point, _baserequirements, still exists, but this change undoes making the class variable to begin with. Without this simplification, there is a class variable with a default value that is only copied, but never directly used. This behavior is moved directly into the _baserequirements function.
Wed, 29 Apr 2015 10:30:58 -0700 changegroup.group: drop 'reorder' parameter
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Apr 2015 10:30:58 -0700] rev 24912
changegroup.group: drop 'reorder' parameter Since we always pass self._reorder to self.group(), let's drop the parameter and let group() read from self._reorder itself. There are no other in-tree callers to group().
Wed, 29 Apr 2015 10:38:45 -0700 cg2packer: set reorder=False in __init__ instead of in group()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Apr 2015 10:38:45 -0700] rev 24911
cg2packer: set reorder=False in __init__ instead of in group() The difference between reorder=None (bundle.reorder=auto) and reorder=False is that the generaldelta revlogs get reordered with the former. In cg2packer, group() we check if the revlog uses generaldelta and if reorder=None and then convert that to reorder=False. We are effectively saying that whether or not generaldelta is used, we want reorder=None to mean reorder=False for changegroup 2. To make this clearer, check if reorder=None in the constructor and change it to False there and drop the overriding of group(). Also document the reason for turning reordering off.
Thu, 23 Apr 2015 09:44:22 -0700 changegroup: use 'reorder is None' instead of 'reorder is not True/False'
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Apr 2015 09:44:22 -0700] rev 24910
changegroup: use 'reorder is None' instead of 'reorder is not True/False' The config option bundle.reorder can be {on,off,auto}, which gets read into the 'reorder' variable as {True,False,None}. In two places, we need to decide how to handle the None/auto case. I personally find it easier to read those expressions when written to explicitly compare to None.
Thu, 09 Apr 2015 23:47:07 -0400 crecord: fix mixed imports warning
Matt Harbison <matt_harbison@yahoo.com> [Thu, 09 Apr 2015 23:47:07 -0400] rev 24909
crecord: fix mixed imports warning
Fri, 01 May 2015 20:17:00 -0400 windows: add doctest for shellquote()
Matt Harbison <matt_harbison@yahoo.com> [Fri, 01 May 2015 20:17:00 -0400] rev 24908
windows: add doctest for shellquote() This is actual test coverage for issue4629. The test changes in eea3977e6fca were simply the addition of quotes to the output, not ensuring that strings with backslashes are quoted.
Sat, 25 Apr 2015 21:42:07 +0900 template-phases: extend default style instead of duplicating it
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Apr 2015 21:42:07 +0900] rev 24907
template-phases: extend default style instead of duplicating it The phases style started as a copy of the default style at 5c5152af0d15, but we didn't have to copy it because the templater supports %include syntax. This makes sure that the phases style have the same output as the default except for the additional "phase:" row.
Thu, 30 Apr 2015 22:40:18 +0900 commands: hide formatter option as EXPERIMENTAL, not as DEPRECATED stable
Yuya Nishihara <yuya@tcha.org> [Thu, 30 Apr 2015 22:40:18 +0900] rev 24906
commands: hide formatter option as EXPERIMENTAL, not as DEPRECATED 117b9a101f71 introduced the EXPERIMENTAL marker, so we should use it consistently.
Sat, 18 Apr 2015 15:39:26 +0200 keyword: use wvfs.rmtree to remove kwdemo directory
Christian Ebert <blacktrash@gmx.net> [Sat, 18 Apr 2015 15:39:26 +0200] rev 24905
keyword: use wvfs.rmtree to remove kwdemo directory Pass repo.root explicitly as argument to indicate that removal of the temporary repo is intentional in this case.
Mon, 20 Apr 2015 10:52:20 +0300 revset: id() called with 40-byte strings should give the same results as for short strings stable
Alexander Drozdov <al.drozdov@gmail.com> [Mon, 20 Apr 2015 10:52:20 +0300] rev 24904
revset: id() called with 40-byte strings should give the same results as for short strings The patch solves two issues: 1. id(unknown_full_hash) aborts, but id(unknown_short_hash) doesn't 2. id(40byte_tag_or_bookmark) returns tagged/bookmarked revision, but id(non-40byte_tag_or_bookmark) doesn't After the patch: 1. id(unknown_full_hash) doesn't abort 2. id(40byte_tag_or_bookmark) returns empty set
Sun, 03 May 2015 17:33:14 +0900 templater: fix crash by passing invalid object to date() function stable
Yuya Nishihara <yuya@tcha.org> [Sun, 03 May 2015 17:33:14 +0900] rev 24903
templater: fix crash by passing invalid object to date() function "date information" is somewhat obscure, but we call it that way in templatekw.showdate().
Sun, 03 May 2015 12:49:15 -0700 util.checkcase: don't abort on broken symlinks stable
Siddharth Agarwal <sid0@fb.com> [Sun, 03 May 2015 12:49:15 -0700] rev 24902
util.checkcase: don't abort on broken symlinks One case where that would happen is while trying to resolve a subrepo, if the path to the subrepo was actually a broken symlink. This bug was exposed by an hg-git test.
Wed, 22 Apr 2015 15:03:09 -0700 changegroup: close progress in same function as it's started
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Apr 2015 15:03:09 -0700] rev 24901
changegroup: close progress in same function as it's started changegroup.group() and changegroup.generatefiles() both currently start progress (with topic "bundling"), but changegroup.generate() closes the topic. Move the closing to the functions that start the topic, so it's easier to see where the topic is started and closed. This completes a move that seems to have been started in 0b564cf359a7 (bundle-ng: move progress handling out of the linkrev callback, 2013-05-10).
Tue, 28 Apr 2015 10:21:04 -0700 changegroup: don't reuse 'mfest' variable for different type
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Apr 2015 10:21:04 -0700] rev 24900
changegroup: don't reuse 'mfest' variable for different type We have a variable 'mfest' that's first a manifest nodeid and then a manifest. Let's make it clearer by using separate variables for the two uses.
Tue, 28 Apr 2015 10:19:42 -0700 changegroup: rename 'mf' to 'ml' to match 'cl', since it's a revlog
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Apr 2015 10:19:42 -0700] rev 24899
changegroup: rename 'mf' to 'ml' to match 'cl', since it's a revlog The 'mf' variable is a manifest revlog, not a manifest, so let's rename it accordingly. We already call the changelog variable 'cl', so 'ml' seems appropriate.
Mon, 20 Apr 2015 14:11:20 -0700 changegroup: rename 'needed' to 'clrevs' to match 'clnodes'
Martin von Zweigbergk <martinvonz@google.com> [Mon, 20 Apr 2015 14:11:20 -0700] rev 24898
changegroup: rename 'needed' to 'clrevs' to match 'clnodes'
Tue, 28 Apr 2015 13:49:19 -0700 changegroup: document that 'source' parameter exists for extensions
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Apr 2015 13:49:19 -0700] rev 24897
changegroup: document that 'source' parameter exists for extensions The 'source' parameter passed to generatefiles() is unused by the method itself, but Durham says it is used by an extension.
Tue, 28 Apr 2015 13:40:00 -0700 changegroup: removed unused 'source' parameter from prune()
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Apr 2015 13:40:00 -0700] rev 24896
changegroup: removed unused 'source' parameter from prune() The parameter has been unused since it was introduced in 6ea1f858efd9 (bundle: refactor changegroup prune to be its own function, 2013-05-30), and Durham says it is not used by his extension either.
Fri, 01 May 2015 17:21:10 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Fri, 01 May 2015 17:21:10 -0500] rev 24895
merge with stable
Fri, 01 May 2015 16:49:15 -0500 Added signature for changeset 8cc6036bca53 stable
Matt Mackall <mpm@selenic.com> [Fri, 01 May 2015 16:49:15 -0500] rev 24894
Added signature for changeset 8cc6036bca53
Fri, 01 May 2015 16:48:51 -0500 Added tag 3.4 for changeset 8cc6036bca53 stable
Matt Mackall <mpm@selenic.com> [Fri, 01 May 2015 16:48:51 -0500] rev 24893
Added tag 3.4 for changeset 8cc6036bca53
Sat, 02 May 2015 00:15:03 +0900 tests: make tests with temporary environment setting portable stable 3.4
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 02 May 2015 00:15:03 +0900] rev 24892
tests: make tests with temporary environment setting portable With "dash" (as "/bin/sh" on Debian GNU/Linux), command execution in "ENV=val foo bar" style doesn't work as expect in test script files, if "foo" is user-defined function: it works fine, if "foo" is existing commands like "hg". 09049042ab99 introduced tests for HGPLAIN and HGPLAINEXCEPT into test-revset.t, and all of them are in such style. This patch doesn't: - add explicit unsetting for HGPLAIN and HGPLAINEXCEPT they are already introduced by 09049042ab99 - write assignment and exporting in one line "ENV=val; export ENV" for two or more environment variables in one line causes failure of test-check-code-hg.t: it is recognized as "don't export and assign at once" unfortunately.
Thu, 30 Apr 2015 23:02:52 -0400 debuginstall: expand the editor path before searching for it (issue4380) stable
Matt Harbison <matt_harbison@yahoo.com> [Thu, 30 Apr 2015 23:02:52 -0400] rev 24891
debuginstall: expand the editor path before searching for it (issue4380) The editor launches without expanding the path with commits because the shell does that for us. If the path isn't an executable, the expanded path is displayed, which is probably more useful than the unexpanded path. For example, in cmd.exe, '~' expands to C:\Users\$user. But it expands to C:/mingw/msys/1.0/home/$user in MinGW.
Fri, 01 May 2015 22:19:20 +0900 censor: fix incorrect configuration name for ignoring error at censored file stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 01 May 2015 22:19:20 +0900] rev 24890
censor: fix incorrect configuration name for ignoring error at censored file According to recent "filectx.data()" implementation, "censor.policy" should be configured as "ignore" to ignore error at censored file: "censor.allow" seems outdated name.
Thu, 30 Apr 2015 17:50:50 -0500 merge with i18n stable
Matt Mackall <mpm@selenic.com> [Thu, 30 Apr 2015 17:50:50 -0500] rev 24889
merge with i18n
Thu, 30 Apr 2015 19:12:28 +0900 i18n-ja: synchronized with 194207694def stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 30 Apr 2015 19:12:28 +0900] rev 24888
i18n-ja: synchronized with 194207694def
Wed, 29 Apr 2015 16:43:02 -0300 i18n-pt_BR: synchronized with 89fe9921511f stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 29 Apr 2015 16:43:02 -0300] rev 24887
i18n-pt_BR: synchronized with 89fe9921511f
Thu, 30 Apr 2015 12:33:36 -0700 templater: fail more gracefully for blank strings to word stable
Ryan McElroy <rmcelroy@fb.com> [Thu, 30 Apr 2015 12:33:36 -0700] rev 24886
templater: fail more gracefully for blank strings to word
Wed, 29 Apr 2015 21:14:59 -0400 windows: make shellquote() quote any path containing '\' (issue4629) stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 29 Apr 2015 21:14:59 -0400] rev 24885
windows: make shellquote() quote any path containing '\' (issue4629) The '~' in the bug report is being expanded to a path with Windows style slashes before being passed to shellquote() via util.shellquote(). But shlex.split() strips '\' out of the string, leaving an invalid path in dispatch.aliasargs(). This regressed in 1642eb429536. For now, the tests need to be conditionalized for Windows (because those paths are quoted). In the future, a more complex regex could probably skip the quotes if all component separators are double '\'. I opted to glob away the quotes in test-rename-merge2.t and test-up-local-change.t (which only exist on Windows), because they are in very large blocks of output and there are way too many diffs to conditionalize with #if directives. Maybe the entire path should be globbed away like the following paths in each changed line. Or, letting #if directives sit in the middle of the output as was mentioned a few months back would work too. Unfortunately, I couldn't figure out how to test the specific bug. All of the 'hg serve' tests have a #require serve declaration, causing them to be skipped on Windows. Adding an alias for 'expandtest = outgoing ~/bogusrepo' prints the repo as '$TESTTMP/bogusrepo', so the test runner must be changing the environment somehow.
Wed, 29 Apr 2015 23:55:25 -0400 test-commit-interactive: add more globs for no-execbit platforms stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 29 Apr 2015 23:55:25 -0400] rev 24884
test-commit-interactive: add more globs for no-execbit platforms The ability to set the exec bit on Windows would be real handy for this test..
Thu, 30 Apr 2015 07:46:54 -0700 ui: disable revsetaliases in plain mode (BC) stable
Siddharth Agarwal <sid0@fb.com> [Thu, 30 Apr 2015 07:46:54 -0700] rev 24883
ui: disable revsetaliases in plain mode (BC) ui.plain() is supposed to disable config options that change the UI to the detriment of scripts. As the test demonstrates, revset aliases can actually override builtin ones, just like command aliases. Therefore I believe this is a bugfix and appropriate for stable.
Wed, 29 Apr 2015 19:47:37 +0900 bundlerepo: disable filtering of changelog while constructing revision text stable
Yuya Nishihara <yuya@tcha.org> [Wed, 29 Apr 2015 19:47:37 +0900] rev 24882
bundlerepo: disable filtering of changelog while constructing revision text This avoids the following error that happened if base revision of bundle file was hidden. bundlerevlog needs it to construct revision texts from bundle content as revlog.revision() does. File "mercurial/context.py", line 485, in _changeset return self._repo.changelog.read(self.rev()) File "mercurial/changelog.py", line 319, in read text = self.revision(node) File "mercurial/bundlerepo.py", line 124, in revision text = self.baserevision(iterrev) File "mercurial/bundlerepo.py", line 160, in baserevision return changelog.changelog.revision(self, nodeorrev) File "mercurial/revlog.py", line 1041, in revision node = self.node(rev) File "mercurial/changelog.py", line 211, in node raise error.FilteredIndexError(rev) mercurial.error.FilteredIndexError: 1
Wed, 29 Apr 2015 15:52:31 -0400 merge: run update hook after the last wlock release stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 29 Apr 2015 15:52:31 -0400] rev 24881
merge: run update hook after the last wlock release There were 2 test failures in 3.4-rc when running test-hook.t with the largefiles extension enabled. For context, the first is a commit hook: @@ -618,9 +621,9 @@ $ echo 'update = hg id' >> .hg/hgrc $ echo bb > a $ hg ci -ma - 223eafe2750c tip + d3354c4310ed+ $ hg up 0 - cb9a9f314b8b + 223eafe2750c+ tip 1 files updated, 0 files merged, 0 files removed, 0 files unresolved make sure --verbose (and --quiet/--debug etc.) are propagated to the local ui In both cases, largefiles acquires the wlock before calling into core, which also acquires the wlock. The first case was fixed in 57f1dbc99631 by ensuring the hook only runs after the lock has been fully released. The full release is important, because that is what writes dirstate to the disk, allowing external hooks to see the result of the update. This simply changes how the update hook is called, so that it too is deferred until the lock is finally released. There are many uses of mergemod.update(), but in terms of commands, it looks like the following commands take wlock while calling mergemod.update(), and therefore will now have their hook fired at a later time: backout, fetch, histedit, qpush, rebase, shelve, transplant Unlike the others, fetch immediately unlocks after calling update(), so for all intents and purposes, its hook invocation is not deferred (but the external hook still sees the proper state).
Thu, 30 Apr 2015 03:39:39 +0900 censor: remove meaningless explanation about .hgcensored stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 30 Apr 2015 03:39:39 +0900] rev 24880
censor: remove meaningless explanation about .hgcensored There is no code path handling ".hgcensored" in Mercurial source tree. This meaningless explanation may make users misunderstand about censor.
Wed, 29 Apr 2015 23:07:34 +0900 parsers: avoid signed integer overflow in calculation of leaf-node index stable
Yuya Nishihara <yuya@tcha.org> [Wed, 29 Apr 2015 23:07:34 +0900] rev 24879
parsers: avoid signed integer overflow in calculation of leaf-node index If v = -INT_MAX - 1, -v would exceed INT_MAX. I don't think this would cause problems such as issue4627, but we can't blame it as a compiler bug because signed integer overflow is undefined in C.
Tue, 28 Apr 2015 17:38:02 -0700 bundle2: disable ouput capture unless we use http (issue4613 issue4615) stable
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 28 Apr 2015 17:38:02 -0700] rev 24878
bundle2: disable ouput capture unless we use http (issue4613 issue4615) The current bundle2 processing was capturing all output. This is nice as it provide better meta data about what output what, but this was changing two things: 1) adding a prefix "remote: " to "other" output during local push (issue4613) 2) local and ssh push does not provide real time output anymore (issue4615) As we are unsure about what form should be used in (1) and how to solve (2) we disable output capture in this two cases. Output capture can be forced using an experimental option.
Tue, 03 Feb 2015 15:01:43 -0500 subrepo: propagate the --hidden option to hg subrepositories stable
Matt Harbison <matt_harbison@yahoo.com> [Tue, 03 Feb 2015 15:01:43 -0500] rev 24877
subrepo: propagate the --hidden option to hg subrepositories With many commands accepting a '-S' or an explicit path to trigger recursing into subrepos, it seems that --hidden needs to be propagated too. Unfortunately, many of the subrepo layer methods discard the options map, so passing the option along explicitly isn't currently an option. It also isn't clear if other filtered views need to be propagated, so changing all of those commands may be insufficient anyway. The specific jam I got into was amending an ancestor of qbase in a subrepo, and then evolving. The patch ended up being hidden, and outgoing said it would only push one unrelated commit. But push aborted with an 'unknown revision' that I traced back to the patch. (Odd it didn't say 'filtered revision'.) A push with --hidden worked from the subrepo, but that wasn't possible from the parent repo before this. Since the underlying problem doesn't actually require a subrepo, there's probably more to investigate here in the discovery area. Yes, evolve + mq is not exactly sane, but I don't know what is seeing the hidden revision. In lieu of creating a test for the above situation (evolving mq should probably be blocked), the test here is a marginally useful case where --hidden is needed in a subrepo: cat'ing a file in a hidden revision. Without this change, cat aborts with: $ hg --hidden cat subrepo/a skipping missing subrepository: subrepo [1]
Mon, 27 Apr 2015 21:34:23 -0400 subrepo: don't pass the outer repo's --rev or --branch to subrepo incoming() stable
Matt Harbison <matt_harbison@yahoo.com> [Mon, 27 Apr 2015 21:34:23 -0400] rev 24876
subrepo: don't pass the outer repo's --rev or --branch to subrepo incoming() When passing a --rev, 'hg incoming -S' previously suffered from the same output truncation or abort that was fixed for 'hg outgoing -S' in the previous patch, for the same reasons. Unlike push, subrepos are currently only pulled when the outer repo is updated, not when the outer repo is pulled. That makes matching 'hg pull' behavior impossible. Listing all incoming csets in the subrepo seems like the most useful behavior, and is consistent with 'hg outgoing -S'.
Mon, 27 Apr 2015 21:15:25 -0400 subrepo: don't pass the outer repo's --rev or --branch to subrepo outgoing() stable
Matt Harbison <matt_harbison@yahoo.com> [Mon, 27 Apr 2015 21:15:25 -0400] rev 24875
subrepo: don't pass the outer repo's --rev or --branch to subrepo outgoing() The previous behavior didn't reflect what would actually be pushed- push will ignore --rev and --branch in the subrepo and push everything. Therefore, 'push -r {rev}' would not list everything, unless {rev} was also the revision of the subrepo's tip. Worse, if a hash was passed in, the command would abort because that hash would either not be in the outer repo or not in the subrepo.
Mon, 27 Apr 2015 20:25:09 -0400 subrepo: update the help text to account for diff -I/-X gitsubrepo support stable
Matt Harbison <matt_harbison@yahoo.com> [Mon, 27 Apr 2015 20:25:09 -0400] rev 24874
subrepo: update the help text to account for diff -I/-X gitsubrepo support The functionality was added in a48b65ab428d.
Mon, 27 Apr 2015 15:37:57 -0700 revert: make the interactive mode experimental stable
Laurent Charignon <lcharignon@fb.com> [Mon, 27 Apr 2015 15:37:57 -0700] rev 24873
revert: make the interactive mode experimental While fixing issue4304: "record: allow editing new files" we introduced changes in record/crecord. These changes need to be matched with changes in any command using record. Revert is one of these commands and the changes have not been made for this release. Therefore, revert -i should be an experimental feature for this release.
Mon, 27 Apr 2015 15:36:10 -0700 shelve: make the interactive mode experimental stable
Laurent Charignon <lcharignon@fb.com> [Mon, 27 Apr 2015 15:36:10 -0700] rev 24872
shelve: make the interactive mode experimental While fixing issue4304: "record: allow editing new files" we introduced changes in record/crecord. These changes need to be matched with changes in any command using record. Shelve is one of these commands and the changes have not been made for this release. Therefore, shelve -i should be an experimental feature for this release.
(0) -10000 -3000 -1000 -120 +120 +1000 +3000 +10000 tip