Fri, 27 Apr 2012 13:18:09 -0500 merge: check for untracked files more precisely (issue3400) stable
Matt Mackall <mpm@selenic.com> [Fri, 27 Apr 2012 13:18:09 -0500] rev 16534
merge: check for untracked files more precisely (issue3400) This fixes the regression, but still leaves the long-standing issue that merge doesn't cope with trying to merge files and directories.
Fri, 27 Apr 2012 13:07:29 -0500 revlog: backout e5750c6716eb stable
Matt Mackall <mpm@selenic.com> [Fri, 27 Apr 2012 13:07:29 -0500] rev 16533
revlog: backout e5750c6716eb This regresses performance of 'hg branches', presumably because it's visiting the revlog in the wrong order. This suggests we either need to fix the branch code or add some read-behind to mitigate the effect.
Thu, 26 Apr 2012 03:47:17 +0200 wireprotocol: use visibleheads as reference while unbundling (issue 3303) stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 26 Apr 2012 03:47:17 +0200] rev 16532
wireprotocol: use visibleheads as reference while unbundling (issue 3303) The `repo` object here is *always* local. Using `repo.heads()` ensure we will reject push if any secret changeset exists. During discovery, `visibleheads` were sent to the peer. So we can only expect it to send us `visibleheads` back. If any secret changeset exists:: visibleheads != repo.heads() This fix server side part of issue 3303 when pushing over the wire.
Wed, 25 Apr 2012 17:04:18 +0200 rebase: preserve mq series order, guarded patches (issue2849) stable
Patrick Mezard <patrick@mezard.eu> [Wed, 25 Apr 2012 17:04:18 +0200] rev 16531
rebase: preserve mq series order, guarded patches (issue2849) The previous code was rebasing an applied series like: patch1 +guarded patch2 patch3 +guarded patch4 patch5 +guarded into: patch2 patch4 patch1 +guarded patch3 +guarded patch5 +guarded Reported by Lars Westerhoff <lars.westerhoff@newtec.eu> Also rename mq.series_dirty into mq.seriesdirty, missed by 599a72895c0d, and without effect since mq.qimport() was setting it already.
Thu, 26 Apr 2012 12:13:20 +0200 subrepo/svn: improve error message on missing files stable
Patrick Mezard <patrick@mezard.eu> [Thu, 26 Apr 2012 12:13:20 +0200] rev 16530
subrepo/svn: improve error message on missing files From: abort: failed to commit svn changes to: abort: cannot commit missing svn entries
Thu, 26 Apr 2012 11:55:07 +0200 subrepo/svn: abort on commit with missing file (issue3029) stable
Patrick Mezard <patrick@mezard.eu> [Thu, 26 Apr 2012 11:55:07 +0200] rev 16529
subrepo/svn: abort on commit with missing file (issue3029) Previous code was printing a traceback because it expected some error output from svn. But sometimes our definition of "changed" differs with the subversion one. For instance, subversion ignores missing files when committing. And when there are only missing files, svn commit will be a successful no-op with no output. Still, we should stick to our definition including missing files in changes as doing otherwise could cause surprising behaviour for the user.
Thu, 26 Apr 2012 21:32:48 +0900 doc: flatten description of 'matching()' predicate to be formatted well stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 Apr 2012 21:32:48 +0900] rev 16528
doc: flatten description of 'matching()' predicate to be formatted well current description of 'matching()' revset predicate can't be formatted well on "hg help revset" output. each descriptions for revset predicates (or something like them) are split-ed into lines, and spaces on left side of them are stripped before minirst processing. so, bullet list can't be nested. this patch just flattens description of 'matching()' predicate to be formatted well.
Fri, 27 Apr 2012 11:02:16 +0200 subrepo: fix default implementation of forget() (issue3404) stable
Patrick Mezard <patrick@mezard.eu> [Fri, 27 Apr 2012 11:02:16 +0200] rev 16527
subrepo: fix default implementation of forget() (issue3404)
Fri, 27 Apr 2012 10:17:55 +0200 test-subrepo-svn: fix non-determinism stable
Patrick Mezard <patrick@mezard.eu> [Fri, 27 Apr 2012 10:17:55 +0200] rev 16526
test-subrepo-svn: fix non-determinism The test was randomly failing with: --- /tests/test-subrepo-svn.t +++ /test-subrepo-svn.t.err @@ -273,10 +273,10 @@ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd t/s $ svn status - ? * a (glob) - X * externals (glob) - ? * f1 (glob) - ? * f2 (glob) + ? f1 + ? f2 + ? a + X externals Performing status on external item at 'externals'* (glob)
Fri, 27 Apr 2012 10:11:56 +0200 test-convert-svn-source: fix non-determinism stable
Patrick Mezard <patrick@mezard.eu> [Fri, 27 Apr 2012 10:11:56 +0200] rev 16525
test-convert-svn-source: fix non-determinism This test was failing randomly with: --- /tests/test-convert-svn-source.t +++ /tests/test-convert-svn-source.t.err @@ -35,8 +35,8 @@ $ svnurl="file://$svnpath/svn-repo/proj%20B" $ svn import -m "init projB" projB "$svnurl" | fixpath + Adding projB/tags Adding projB/mytrunk - Adding projB/tags Committed revision 1.
Thu, 26 Apr 2012 21:44:02 +0200 patch: be more tolerant with EOLs in binary diffs (issue2870) stable
Patrick Mezard <patrick@mezard.eu> [Thu, 26 Apr 2012 21:44:02 +0200] rev 16524
patch: be more tolerant with EOLs in binary diffs (issue2870) The only place where an trailing CR could be meaningful is in the "diff --git" line as part of a filename, and existing code already rule out this possibility. Extend the CR/LF filtering to the whole binary hunk.
Thu, 26 Apr 2012 21:44:00 +0200 patch: include file name in binary patch error messages stable
Patrick Mezard <patrick@mezard.eu> [Thu, 26 Apr 2012 21:44:00 +0200] rev 16523
patch: include file name in binary patch error messages $ hg import --no-commit ../mercurial_1915035238540490516.patch applying ../mercurial_1915035238540490516.patch abort: could not extract binary data Becomes: abort: could not extract "binary2" binary data
Sat, 21 Apr 2012 19:58:18 +0200 patch: display a nice error for invalid base85 data stable
Patrick Mezard <patrick@mezard.eu> [Sat, 21 Apr 2012 19:58:18 +0200] rev 16522
patch: display a nice error for invalid base85 data Before, import was terminating with a traceback. Now it says: $ hg import --no-commit ../bad.patch applying ../bad.patch abort: could not decode binary patch: bad base85 character at position 66
Thu, 26 Apr 2012 14:24:46 +0200 revset: fix adds/modifies/removes and patterns (issue3403) stable
Patrick Mezard <patrick@mezard.eu> [Thu, 26 Apr 2012 14:24:46 +0200] rev 16521
revset: fix adds/modifies/removes and patterns (issue3403) The fast path was triggered if the argument was not like "type:value", with type a known pattern type. This is wrong for several reasons: - path:value is valid for the fast path - '*' is interpreted as a glob by default and is not valid for fast path Fast path detection is now done after the pattern is parsed, and the normalized path is extracted for direct comparison. All this seems a bit complicated, it is tempting to drop the fast path completely. Also, the hasfile() revset does something similar (only check .files()), without a fast path. If the fast path is really that efficient maybe it should be used there too. Note that: $ log 'modifies("set:modified()")' is different from: $ log 'modifies("*")' because of the usual merge ctx.files()/status(ctx.p1(), ctx) differences. Reported by Steffen Eichenberg <steffen.eichenberg@msg-gillardon.de>
Thu, 26 Apr 2012 13:18:47 -0500 merge with i18n stable
Matt Mackall <mpm@selenic.com> [Thu, 26 Apr 2012 13:18:47 -0500] rev 16520
merge with i18n
Tue, 24 Apr 2012 21:09:27 -0300 i18n-pt_BR: synchronized with e3c7ca15cde2 stable
Wagner Bruna <wbruna@yahoo.com> [Tue, 24 Apr 2012 21:09:27 -0300] rev 16519
i18n-pt_BR: synchronized with e3c7ca15cde2
Tue, 24 Apr 2012 20:54:56 -0300 merge with i18n stable
Wagner Bruna <wbruna@yahoo.com> [Tue, 24 Apr 2012 20:54:56 -0300] rev 16518
merge with i18n
Tue, 24 Apr 2012 10:06:17 -0300 i18n-pt_BR: synchronized with 83622954b64d stable
Wagner Bruna <wbruna@yahoo.com> [Tue, 24 Apr 2012 10:06:17 -0300] rev 16517
i18n-pt_BR: synchronized with 83622954b64d
Sun, 22 Apr 2012 13:19:22 -0400 largefiles: notice dirty large files in a subrepo stable
Matt Harbison <matt_harbison@yahoo.com> [Sun, 22 Apr 2012 13:19:22 -0400] rev 16516
largefiles: notice dirty large files in a subrepo Summary and commit use dirty() to check the status of a subrepository, so this overrides dirty() in the subrepo in the same manner as status() to check the large files instead of their standins. Previously, if only a large file was changed in a subrepo, summary in the top level repo would not report the subrepo was dirty and commit -S would report nothing changed. If any type of file was changed in the top repo and only a large file in the subrepo, commit -S would not commit the changes to the subrepo.
Sun, 22 Apr 2012 03:47:34 -0400 largefiles: fix status -S reporting of subrepos (issue3231) stable
Matt Harbison <matt_harbison@yahoo.com> [Sun, 22 Apr 2012 03:47:34 -0400] rev 16515
largefiles: fix status -S reporting of subrepos (issue3231) Wrapping the status command will only invoke overridestatus() and set the lfstatus field for the top level repository. Wrapping the status function is required to set the field on child repositories. Previously, status -S would report large files in a subrepo as '?' regardless of their actual states, and was inconsistent with what status would report from within that subrepo.
Thu, 26 Apr 2012 02:41:20 +0900 i18n: use locale insensitive format for datetimes as intermediate representation (issue3398) stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 Apr 2012 02:41:20 +0900] rev 16514
i18n: use locale insensitive format for datetimes as intermediate representation (issue3398) on some non "en" locale environments, "hg convert" is aborted, because "util.parsedate()" fails. it fails in "memctx.__init__()" called by "putcommit()" of "convert". in "hg convert", datetimes gotten from source repository are usually formatted by "util.datestr()" with default format "%a %b %d %H:%M:%S %Y %1%2". but on some environments, "%a" and "%b" may cause locale sensitive string, and such string may cause parse error in "util.parsedate()". this path uses "%Y-%m-%d %H:%M:%S %1%2" as intermediate representation format for datetimes, because it consists only of locale insensitive elements. datetimes in above format are only used for passing them from conversion logic to memctx object, so it doesn't have to be formatted by locale sensitive one. this patch just avoids locale sensitivity problem of "datestr()" and "parsedate()" combintion.
Tue, 24 Apr 2012 14:34:54 +0200 alias: fix shell alias documentation (issue3374) stable
Patrick Mezard <patrick@mezard.eu> [Tue, 24 Apr 2012 14:34:54 +0200] rev 16513
alias: fix shell alias documentation (issue3374) Described behaviour was the one before shell alias argument handling was reworked by f853873fc66d mid-2010.
Tue, 24 Apr 2012 13:05:38 +0200 test-convert-svn-sink: add helper to smooth svn xml output stable
Patrick Mezard <patrick@mezard.eu> [Tue, 24 Apr 2012 13:05:38 +0200] rev 16512
test-convert-svn-sink: add helper to smooth svn xml output svnxml.py parses "svn log --xml" output and prints the attributes shared among all tested svn versions. This fixes the test with svn 1.7. Tested with svn 1.6.12 and 1.7.4.
Tue, 24 Apr 2012 12:50:41 +0200 convert/svn: make svn sink work with svn 1.7 stable
Patrick Mezard <patrick@mezard.eu> [Tue, 24 Apr 2012 12:50:41 +0200] rev 16511
convert/svn: make svn sink work with svn 1.7 "svn add file" now fails if "file" is already tracked. To filter them we have to mirror the svn manifest in the sink. Tested with svn 1.6.12 and 1.7.4.
Wed, 25 Apr 2012 23:28:54 +0200 docs: don't use :hg: at the beginning of lines in notes (issue3397) stable
Mads Kiilerich <mads@kiilerich.com> [Wed, 25 Apr 2012 23:28:54 +0200] rev 16510
docs: don't use :hg: at the beginning of lines in notes (issue3397) It seem like docutils 0.8 interpret ':hg:`command`' roles at the beginning of indented lines in '.. note::' directives as a field that is an invalid argument to the directive. It fails with 'Error in "note" directive: invalid option block.' Docutils 0.7 accepted this arguably incorrect markup. Reflowing the text makes the problem go away. A leading '\ ' could perhaps also be used to mask the problem.
Sun, 22 Apr 2012 20:06:36 +0200 rebase: skip resolved but emptied revisions stable
Patrick Mezard <patrick@mezard.eu> [Sun, 22 Apr 2012 20:06:36 +0200] rev 16509
rebase: skip resolved but emptied revisions When rebasing, if a conflict occurs and is resolved in a way the rebased revision becomes empty, it is not skipped, unlike revisions being emptied without conflicts. The reason is: - File 'x' is merged and resolved, merge.update() marks it as 'm' in the dirstate. - rebase.concludenode() calls localrepo.commit(), which calls localrepo.status() which calls dirstate.status(). 'x' shows up as 'm' and is unconditionnally added to the modified files list, instead of being checked again. - localrepo.commit() detects 'x' as changed an create a new revision where only the manifest parents and linkrev differ. Marking 'x' as modified without checking it makes sense for regular merges. But in rebase case, the merge looks normal but the second parent is usually discarded. When this happens, 'm' files in dirstate are a bit irrelevant and should be considered 'n' possibly dirty instead. That is what the current patch does. Another approach, maybe more efficient, would be to pass another flag to merge.update() saying the 'branchmerge' is a bit of a lie and recordupdate() should call dirstate.normallookup() instead of merge(). It is also tempting to add this logic to dirstate.setparents(), moving from two to one parent is what invalidates the 'm' markers. But this is a far bigger change to make. v2: succumb to the temptation and move the logic in dirstate.setparents(). mpm suggested trying _filecommit() first but it is called by commitctx() which knows nothing about the dirstate and comes too late into the game. A second approach was to rewrite the 'm' state into 'n' on the fly in dirstate.status() which failed for graft in the following case: $ hg init repo $ cd repo $ echo a > a $ hg ci -qAm0 $ echo a >> a $ hg ci -m1 $ hg up 0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg mv a b $ echo c > b $ hg ci -m2 created new head $ hg graft 1 --tool internal:local grafting revision 1 $ hg --config extensions.graphlog= glog --template '{rev} {desc|firstline}\n' @ 3 1 | o 2 2 | | o 1 1 |/ o 0 0 $ hg log -r 3 --debug --patch --git --copies changeset: 3:19cd7d1417952af13161b94c32e901769104560c tag: tip phase: draft parent: 2:b5c505595c9e9a12d5dd457919c143e05fc16fb8 parent: -1:0000000000000000000000000000000000000000 manifest: 3:3d27ce8d02241aa59b60804805edf103c5c0cda4 user: test date: Thu Jan 01 00:00:00 1970 +0000 extra: branch=default extra: source=a03df74c41413a75c0a42997fc36c2de97b26658 description: 1 Here, revision 3 is created because there is a copy record for 'b' in the dirstate and thus 'b' is considered modified. But this information is discarded at commit time since 'b' content is unchanged. I do not know if discarding this information is correct or not, but at this time we cannot represent it anyway. This patch therefore implements the last solution of moving the logic into dirstate.setparents(). It does not sound crazy as 'm' files makes no sense with only one parent. It also makes dirstate.merge() calls .lookupnormal() if there is one parent, to preserve the invariant. I am a bit concerned about introducing this kind of stateful behaviour to existing code which historically treated setparents() as a basic setter without side-effects. And doing that during the code freeze.
Sun, 22 Apr 2012 18:27:50 +0200 test-rebase: exhibit revisions which should have been skipped stable
Patrick Mezard <patrick@mezard.eu> [Sun, 22 Apr 2012 18:27:50 +0200] rev 16508
test-rebase: exhibit revisions which should have been skipped This will be fixed in the next commit. v2: - Display emptied grafted revisions - Use --git flag
Sun, 22 Apr 2012 16:40:38 +0200 transplant: do not rollback on patching error (issue3379) stable
Patrick Mezard <patrick@mezard.eu> [Sun, 22 Apr 2012 16:40:38 +0200] rev 16507
transplant: do not rollback on patching error (issue3379) Otherwise, all transplanted revisions are gone and the failing one cannot be fixed (unless it is the first one). I do not know what is the expected behaviour with rollback, probably something pull-like. Non-conflicting cases should work as previously. But something like: $ hg transplant r1 r2 commiting r1 as c1 failing r2 $ hg transplant --continue committing r2 as c2 $ hg rollback would reset the repository to its state before the "transplant --continue" instead of the whole transplant session. To fix this we might need a way to open an existing journal file, not sure this is worth the pain.
Sat, 21 Apr 2012 21:40:25 +0200 patch: fix patch hunk/metdata synchronization (issue3384) stable
Patrick Mezard <patrick@mezard.eu> [Sat, 21 Apr 2012 21:40:25 +0200] rev 16506
patch: fix patch hunk/metdata synchronization (issue3384) Git patches are parsed in two phases: 1) extract metadata, 2) parse actual deltas and merge them with the previous metadata. We do this to avoid dependency issues like "modify a; copy a to b", where "b" must be copied from the unmodified "a". Issue3384 is caused by flaky code I wrote to synchronize the patch metadata with the emitted hunk: if (gitpatches and (gitpatches[-1][0] == afile or gitpatches[-1][1] == bfile)): gp = gitpatches.pop()[2] With a patch like: diff --git a/a b/c copy from a copy to c --- a/a +++ b/c @@ -1,1 +1,2 @@ a +a @@ -2,1 +2,2 @@ a +a diff --git a/a b/a --- a/a +++ b/a @@ -1,1 +1,2 @@ a +b the first hunk of the first block is matched with the metadata for the block "diff --git a/a b/c", then the second hunk of the first block is matched with the metadata of the second block "diff --git a/a b/a", because of the "or" in the code paste above. Turning the "or" into an "and" is not enough as we have to deal with /dev/null cases for each file. We I remove this broken piece of code: # copy/rename + modify should modify target, not source if gp.op in ('COPY', 'DELETE', 'RENAME', 'ADD') or gp.mode: afile = bfile because "afile = bfile" set "afile" to stuff like "b/file" instead of "a/file", and because this only happens for git patches, which afile/bfile are ignored anyway by applydiff(). v2: - Avoid a traceback on git metadata desynchronization
Sat, 21 Apr 2012 10:23:47 +0200 commit: use ui.configbool when checking 'commitsubrepos' setting on --amend stable
Adrian Buehlmann <adrian@cadifra.com> [Sat, 21 Apr 2012 10:23:47 +0200] rev 16505
commit: use ui.configbool when checking 'commitsubrepos' setting on --amend Before this fix, having [ui] commitsubrepos = False in the config file lead to $ hg ci --amend -mx abort: cannot amend recursively
Mon, 23 Apr 2012 00:38:22 +0900 doc: add note about pattern rooted/unrooted cases to "hgignore" and "patterns" stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 23 Apr 2012 00:38:22 +0900] rev 16504
doc: add note about pattern rooted/unrooted cases to "hgignore" and "patterns" each help topics describe that patterns are "not rooted" and "rooted" in themselves, but not describe about each other. so, this may causes misunderstanding about "rooted"-ness of patterns.
Mon, 23 Apr 2012 00:33:09 +0900 doc: add description about location of management files for subrepo stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 23 Apr 2012 00:33:09 +0900] rev 16503
doc: add description about location of management files for subrepo
(0) -10000 -3000 -1000 -300 -100 -50 -32 +32 +50 +100 +300 +1000 +3000 +10000 +30000 tip