Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 18:09:54 +0200] rev 22337
obsmarker: write a message with the number of markers added through bundle2
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 18:08:22 +0200] rev 22336
bundle2: add an obsmarkers part handler
This part contains a binary stream of obsolescence markers. Received markers are
added to the repository.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:24:40 +0200] rev 22335
obsolete: make encodemarkers a public function
We'll need access to it for bundle2.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:21:33 +0200] rev 22334
obsolete: move _encodemarkers next to _readmarkers
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:18:44 +0200] rev 22333
obsstore: store and preserve ondisk version
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:51:51 +0200] rev 22332
obsolete: have _readmarkers return the format version
readmarkers is not returning the version of the format it read from. This will
let callers know about the format and allow them to preserve it.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:16:01 +0200] rev 22331
obsolete: support for any known obsstore format when reading or writing
We can now read and write any known format. The list of known formats
currently has one element (0). The obsstore itself is not aware of
multiple formats yet and always uses format 0.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:09:18 +0200] rev 22330
obsolete: move _fm0encodeonemarker next to _fm0readmarkers
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:43:23 +0200] rev 22329
obsolete: rename _encodeonemarker to _fm0encodeonemarkers
This function encodes markers in version 0 of the format.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 14:58:11 +0200] rev 22328
obsolete: extract the part of _readmarkers specific to format version 0
If we are to introduce new formats we need to be able call different
functions for different formats. Creating a function for format
version 0 is the first step.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 14:56:15 +0200] rev 22327
obsolete: rename all _fm to _fm0
This change is because these formats are used for version 0 of the
obsstore format. This is going to be useful in the future when we
introduce new versions of the format.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 14:52:51 +0200] rev 22326
obsolete: rename _fnodesize to _fmfnodesize
All variables involved in the obsstore format are prefixed with `_fm`.
`_fnodesize` was the exception. It is now back in line.
This is meaningful as we'll need to distinguish between multiple versions of the
obsstore format.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 21 Aug 2014 17:42:50 -0700] rev 22325
obsstore: have the `mergemarkers` method return the number of new markers
The mergemarkers function now returns the number of unknown markers in
the stream that have been added to the obsstore. This is similar to what
`obsstore.add` already does.
The method gains a docstring in the process.
Matt Mackall <mpm@selenic.com> [Mon, 01 Sep 2014 23:43:33 +0200] rev 22324
merge with i18n
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 21 Aug 2014 17:36:05 -0700] rev 22323
test-bundle2: add obsolescence information to be exchanged
To introduce a bundle2 way to exchange obsolescence markers, we need to
have some information available to exchange. Introduce markers relevant
to changesets involved in the exchange. The new markers reference the
changesets as successor nodes of clowny (nonexistent) hashes so that
other than being exchanged they have no effect.
We introduce them in two waves as push is expected to be smart about the
number of markers it exchanges sooner than pull.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Aug 2014 20:06:24 +0200] rev 22322
help: only call doc() when it is callable
`hg help -k` on my machine was aborting because the hg-prompt extension
was inserting a string and not a function into help.helptable and help
was blindly calling it.
This patch changes keyword searching to be more robust against
unexpected types.
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 01 Sep 2014 10:57:27 -0300] rev 22321
i18n-pt_BR: synchronized with
6a8b8efb0641
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 01 Sep 2014 10:54:49 -0300] rev 22320
merge with i18n
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 31 Aug 2014 20:49:13 +0900] rev 22319
i18n-ja: synchronized with
0c838e7459a5
Wagner Bruna <wbruna@yahoo.com> [Sat, 30 Aug 2014 09:40:31 -0300] rev 22318
i18n-pt_BR: synchronized with
0c838e7459a5
Mike Hommey <mh@glandium.org> [Sun, 31 Aug 2014 19:43:03 +0900] rev 22317
repoview: fix typo in repoview.changelog
Incidentally, this avoids the changelog cache being invalidated each time
it's accessed on a repoview.
On a filtering experiment on a repository the size of mozilla-central,
this makes a significant difference:
Before, running hg log -l 10 --time with about 8k changesets filtered out:
time: real 1.490 secs (user 1.450+0.000 sys 0.040+0.000)
After:
time: real 0.540 secs (user 0.530+0.000 sys 0.010+0.000)
Aaron Kushner <akushner@fb.com> [Tue, 19 Aug 2014 16:57:02 -0700] rev 22316
config: exit non zero on non-existent config option (
issue4247)
When running 'hg config no_such_option', hg exited with a
zero exit code. This change now exits with a 1 if the
config option does not exist.
Matt Mackall <mpm@selenic.com> [Sat, 30 Aug 2014 18:44:59 +0200] rev 22315
merge with crew
Kevin Bullock <kbullock@ringworld.org> [Sat, 30 Aug 2014 15:13:02 +0200] rev 22314
bookmarks: refer to "the" active bookmark to clarify that there's only one
This is a follow-on to
0c6cdbb697d9 that just makes a slight clarification.
Siddharth Agarwal <sid0@fb.com> [Sat, 30 Aug 2014 05:29:38 -0700] rev 22313
memctx: allow extensions to determine what filectxfn should do
Rev
650b5b6e75ed switched the contract for filectxfn from "raise IOError if
file is missing" to "return None if file is missing". Out of tree extensions
need to be updated for that, but for extensions interested in compatibility
with both Mercurial <= 3.1 and default, it is next to impossible to introspect
core Mercurial to figure out what to do.
This patch adds a field to memctx for extensions to use.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Aug 2014 15:17:37 +0200] rev 22312
revsetbenchmark: add revset with lazyset subtraction
The added revset is used by obsolescence and currently results in
recursion in __contains__ between 2 lazysets. We should have
coverage of this revset.
Sune Foldager <cryo@cyanite.org> [Sat, 30 Aug 2014 11:57:46 +0200] rev 22311
debugrevlog: add chainlen column to --dump output
Henrik Stuart <hg@hstuart.dk> [Sat, 30 Aug 2014 11:56:33 +0200] rev 22310
debugdag: stop wrongly sorting parents
The dag being dumped is not in a format that allows us to reconstruct the
original dag as the parent revisions are normalised.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 29 Aug 2014 18:00:44 +0200] rev 22309
obsolete: avoid slow, generic date parsing
Simple profiling of `hg log -r .` revealed ~18,000 calls to
mercurial.i18n.gettext() on the author's repository. The
culprit was 3 _() calls in util.parsedate() multiplied by
~6000 obsmarkers originating from the parsing of obsmarkers.
Changing the obsmarker code to parse the stored format of
dates instead of going through a generic path eliminates these
gettext() lookups and makes `hg log -r .` execute ~10% faster
on the author's repo. The performance gain is proportional to
the number of obsmarkers.
The author attempted to patch util.parsedate() to avoid the
gettext() lookups. However, that code is whacky and the author
is jet lagged, so the approach was not attempted.
Kevin Bullock <kbullock@ringworld.org> [Fri, 29 Aug 2014 12:06:31 +0200] rev 22308
build: don't use -s flag for `which`
`which -s` is a BSDism that doesn't exist on other versions of
`which`. That means that even on Mac OS X, `make osx` breaks if you have
another utils package installed (e.g. debianutils installed thru
fink). Redirect output to /dev/null instead.
Matt Mackall <mpm@selenic.com> [Fri, 29 Aug 2014 17:15:49 +0200] rev 22307
contrib: drop obsolete sample.hgrc
This was full of bad suggestions and is obsoleted by hg config --edit.
Matt Mackall <mpm@selenic.com> [Fri, 29 Aug 2014 17:14:45 +0200] rev 22306
contrib: drop old convert-repo script
This has been obsolete since 2007.
Matt Mackall <mpm@selenic.com> [Wed, 27 Aug 2014 18:35:34 +0200] rev 22305
merge with stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 23 Aug 2014 21:23:02 +0900] rev 22304
templater: enable alias predicates to be used in "revset()" function
Before this patch, predicates defined in "[revsetalias]" can't be used
in the query specified to template function "revset()", because:
- "revset()" uses "localrepository.revs()" to get query result, but
- "localrepository.revs()" passes "None" as "ui" to "revset.match()", then
- "revset.match()" can't recognize any alias predicates
To enable alias predicates to be used in "revset()" function, this
patch invokes "revset.match()" directly with "repo.ui".
This patch doesn't make "localrepository.revs()" pass "self.ui" to
"revset.match()", because this may be intentional implementation to
prevent alias predicates from shadowing built-in ones and breaking
functions internally using "localrepository.revs()".
Even if it isn't intentional one, the check for shadowing should be
implemented (maybe on default branch) before fixing it for safety.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 27 Aug 2014 23:10:06 +0900] rev 22303
import: show the warning message for failure of merging
Before this patch, no message is shown for failure of merging at "hg
import".
In such case, merging patch is imported as a normal revision silently,
and it may confuse users.
For simplicity, this patch recommends just using "--exact", even
though importing the merging patch itself is possible without it if:
- the hash of the 1st parent in the patch is equal to one of the
patch imported just before (or the parent of the working
directory, for the 1st patch of the series), and
- the hash of the 2nd parent in the patch is known in the local
repository
Mads Kiilerich <madski@unity3d.com> [Wed, 27 Aug 2014 15:30:09 +0200] rev 22302
graft: fix collision detection with origin revisions that are missing
When grafting something with a matching origin, it would normally be skipped:
skipping already grafted revision 123 (23 also has origin 12)
But after stripping a graft origin, graft could fail with a reference to the
origin that no longer exists:
abort: unknown revision '
5c095ad7e90f871700f02dd1fa5012cb4498a2d4'!
Instead, detect that the origin is unknown and skip it anyway, like:
skipping already grafted revision 8 (2 also has unknown origin
5c095ad7e90f871700f02dd1fa5012cb4498a2d4)
Sean Farley <sean.michael.farley@gmail.com> [Sat, 23 Aug 2014 17:03:08 -0500] rev 22301
log: use correct phase info for parent field (
issue4347)
Previously, there was a copy / paste error with using the current changeset's
phase information. We now look up the parent context explicitly.
The line was too long so it is stored into a variable first.
Mads Kiilerich <madski@unity3d.com> [Tue, 26 Aug 2014 22:03:32 +0200] rev 22300
convert: introduce --full for converting all files
Convert will normally only process files that were changed in a source
revision, apply the filemap, and record it has a change in the target
repository. (If it ends up not really changing anything, nothing changes.)
That means that _if_ the filemap is changed before continuing an incremental
convert, the change will only kick in when the files it affects are modified in
a source revision and thus processed.
With --full, convert will make a full conversion every time and process
all files in the source repo and remove target repo files that shouldn't be
there. Filemap changes will thus kick in on the first converted revision, no
matter what is changed.
This flag should in most cases not make any difference but will make convert
significantly slower.
Other names has been considered for this feature, such as "resync", "sync",
"checkunmodified", "all" or "allfiles", but I found that they were less obvious
and required more explanation than "full" and were harder to describe
consistently.
Mads Kiilerich <madski@unity3d.com> [Tue, 26 Aug 2014 22:03:32 +0200] rev 22299
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com> [Tue, 26 Aug 2014 22:03:32 +0200] rev 22298
convert: refactor subversion getchanges and caching
Mads Kiilerich <madski@unity3d.com> [Tue, 26 Aug 2014 22:03:32 +0200] rev 22297
convert: remove incorrect and unused handling of removed svn directories
Since it was introduced in
f0c58fd4b798, tidy_dirs has been comparing
the result of os.listdir with a string - which never can be true.
Convert apparently works anyway and there is no test coverage of it.
It also seems like it could make a bigger difference on older svn versions but
is less relevant with more recent versions.
Instead of trying to fix the code, we take the low risk option and remove it.
Mads Kiilerich <madski@unity3d.com> [Tue, 26 Aug 2014 22:03:32 +0200] rev 22296
convert: use None value for missing files instead of overloading IOError
The internal API used IOError to indicate that a file should be marked as
removed.
There is some correlation between IOError (especially with ENOENT) and files
that should be removed, but using IOErrors to represent file removal internally
required some hacks.
Instead, use the value None to indicate that the file not is present.
Before, spurious IO errors could cause commits that silently removed files.
They will now be reported like all other IO errors so the root cause can be
fixed.
Matt Mackall <mpm@selenic.com> [Wed, 27 Aug 2014 12:30:28 +0200] rev 22295
merge with stable
Mads Kiilerich <madski@unity3d.com> [Mon, 25 Aug 2014 03:27:51 +0200] rev 22294
convert: p4: ignore purged files with p4d 2012.2 and later
Perforce has the concept of "+Sn" files where only the last revisions of the
file is stored. In p4d 2012.1 old purged revisions were not included in the
"manifest". With 2012.2 they started being included and convert's getfile
failed to recognize the "purged" flag and saw it as an empty file. That made
test-convert-p4-filetypes.t fail.
There is no point in storing an empty file as placeholder for a purged file so
we restore the old behaviour by checking the flag and letting getfile consider
purged files deleted.
(It is questionable whether it makes sense to convert not-yet-purged +S files
to mercurial ... but that is another question.)
Mads Kiilerich <madski@unity3d.com> [Mon, 25 Aug 2014 03:27:51 +0200] rev 22293
tests: fix p4 tests so they use separate ports and can be run in parallel
Mads Kiilerich <madski@unity3d.com> [Tue, 26 Aug 2014 22:03:30 +0200] rev 22292
run-tests: report skipped tests as "skipped" - they might still be "relevant"
Yuya Nishihara <yuya@tcha.org> [Sun, 24 Aug 2014 12:35:53 +0900] rev 22291
ui: add brief comment why raw_input() needs dummy ' ' prompt string
Retrieved from
17ffb30d9174.
I was about to move ' ' to label(msg + ' ', 'ui.prompt') so that subclass can
distinguish prompt output from data. But it was not that simple.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 24 Aug 2014 23:47:26 +0900] rev 22290
largefiles: remove redundant "updatelfiles" invocation in "lfilesrepo.commit"
After previous patches, largefiles in the working directory are
ensured to be updated before "repo.commit" invocation for automated
committing below:
- by "overrides.mergeupdate" via "merge.update" for rebase
- by "overrides.scmutilmarktouched" via "patch.patch" for transplant
This patch removes redundant "lfcommands.updatelfiles" invocation in
"Case 0" code path of "lfilesrepo.commit" for automated committing,
and revises detailed comment.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 24 Aug 2014 23:47:26 +0900] rev 22289
largefiles: update largefiles even if transplant is aborted by conflict
Before this patch, largefiles in the working directory aren't updated
correctly, if transplant is aborted by conflict. This prevents users
from viewing appropriate largefiles while resolving conflicts.
While transplant, largefiles in the working directory are updated only
at successful committing in the special code path of
"lfilesrepo.commit()".
To update largefiles even if transplant is aborted by conflict, this
patch wraps "scmutil.marktouched", which is invoked from "patch.patch"
with "files" list of added/modified/deleted files.
This patch invokes "updatelfiles" with:
- "printmessage=False", to suppress "getting changed largefiles ..."
messages while automated committing by transplant
- "normallookup=True", because "patch.patch" doesn't update dirstate
for modified files
in such case, "normallookup=False" may cause marking modified
largefiles as "clean" unexpectedly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 24 Aug 2014 23:47:26 +0900] rev 22288
largefiles: update largefiles even if rebase is aborted by conflict
Before this patch, largefiles in the working directory aren't updated
correctly, if rebase is aborted by conflict. This prevents users from
viewing appropriate largefiles while resolving conflicts.
While rebase, largefiles in the working directory are updated only at
successful committing in the special code path of
"lfilesrepo.commit()".
To update largefiles even if rebase is aborted by conflict, this patch
centralizes the logic of updating largefiles in the working directory
into the "mergeupdate" wrapping "merge.update".
This is a temporary way to fix with less changes. For fundamental
resolution of this kind of problems in the future, largefiles in the
working directory should be updated with other (normal) files
simultaneously while "merge.update" execution: maybe by hooking
"applyupdates".
"Action list based updating" introduced by hooking "applyupdates" will
also improve performance of updating, because it automatically
decreases target files to be checked.
Just after this patch, there are some improper things in "Case 0" code
path of "lfilesrepo.commit()":
- "updatelfiles" invocation is redundant for rebase
- detailed comment doesn't meet to rebase behavior
These will be resolved after the subsequent patch for transplant,
because this code path is shared with transplant.
Even though replacing "merge.update" in rebase extension by "hg.merge"
can also avoid this problem, this patch chooses centralizing the logic
into "mergeupdate", because:
- "merge.update" invocation in rebase extension can't be directly
replaced by "hg.merge", because:
- rebase requires some extra arguments, which "hg.merge" doesn't
take (e.g. "ancestor")
- rebase doesn't require statistics information forcibly displayed
in "hg.merge"
- introducing "mergeupdate" can resolve also problem of some other
code paths directly using "merge.update"
largefiles in the working directory aren't updated regardless of
the result of commands below, before this patch:
- backout (for revisions other than the parent revision of the
working directory without "--merge")
- graft
- histedit (for revisions other than the parent of the working
directory
When "partial" is specified, "merge.update" doesn't update dirstate
entries for standins, even though standins themselves are updated.
In this case, "normallookup" should be used to mark largefiles as
"possibly dirty" forcibly, because applying "normal" on lfdirstate
treats them as "clean" unexpectedly.
This is reason why "normallookup=partial" is specified for
"lfcommands.updatelfiles".
This patch doesn't test "hg rebase --continue", because it doesn't
work correctly if largefiles in the working directory are modified
manually while resolving conflicts. This will be fixed in the next
step of refactoring for largefiles.
All changes of tests/*.t files other than test-largefiles-update.t in
this patch come from invoking "updatelfiles" not after but before
statistics output of "hg.update", "hg.clean" and "hg.merge".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 24 Aug 2014 23:47:26 +0900] rev 22287
largefiles: move "updatestandin" invocation to "hg.updaterepo" wrapper
Code paths below expect "hg.updaterepo" (or "hg.update" using it) to
execute linear merging:
- "update" in commands
- "postincoming" in commands, used for:
- "hg pull --update"
- "hg unbundle --update"
- "hgsubrepo.get" in subrepo
For linear merging with largefiles, standins should be updated
according to (possibly dirty) largefiles before "merge.update"
invocation to detect conflicts correctly.
Before this patch, only the "update" command can execute linear merging
correctly, because largefiles extension takes care of only it.
This patch moves "updatestandin" invocation from "overrideupdate" ("hg
update" wrapper) to "_hgupdaterepo" ("hg.updaterepo" wrapper) to
execute linear merging in "hg.updaterepo" correctly.
This is also a preparation to centralize the logic of updating
largefiles in the working directory into the function wrapping
"merge.update" in the subsequent patch.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 24 Aug 2014 23:47:26 +0900] rev 22286
largefiles: unlink standins not known to the restored dirstate at rollback
Before this patch, standinds not known to the restored dirstate at
rollback still exist after rollback of the parent of the working
directory, and they become orphans unexpectedly.
This patch unlinks standins not known to the restored dirstate.
This patch saves names of standins matched against not
"repo.dirstate[f] == 'a'" but "repo.dirstate[f] != 'r'" before
rollback, because branch merging marks files newly added to
dirstate as not "a" but "n".
Such standins will also become orphan after rollback, because they are
not known to the restored dirstate.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 24 Aug 2014 23:47:25 +0900] rev 22285
largefiles: restore standins according to restored dirstate
Before this patch, standins are restored from the NEW parent of the
working directory at "hg rollback", and this causes:
- standins removed in the rollback-ed revision are restored, and
become orphan, because they are already marked as "R" in the
restored dirstate and expected to be unlinked
- standins added in the rollback-ed revision are left as they were
before rollback, because they are not included in the new parent
(this may not be so serious)
This patch replaces the "merge.update" invocation with a specific
implementation to restore standins according to restored dirstate.
This is also the preparation to centralize the logic of updating
largefiles into the function wrapping "merge.update" in the subsequent
patch.
After that patch, "merge.update" will also update largefiles in the
working directory and be redundant for restoring standins only.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 24 Aug 2014 23:47:25 +0900] rev 22284
largefiles: restore standins from non branch-tip parent at rollback correctly
Before this patch, "hg rollback" can't restore standins correclty, if:
- old parent of the working directory is rollback-ed, and
- new parent of the working directory is not branch-tip
"overriderollback" uses "merge.update" as a kind of "revert" utility
to restore only standins with "node=None", and this makes
"merge.update" choose "branch-tip" revision as the updating target
unexpectedly.
Then, "merge.update" restores standins from the branch-tip revision
regardless of the parent of the working directory after rollback and
this may cause unexpected behavior.
This patch invokes "merge.update" with "node='.'" to restore standins
from the parent revision of the working directory.
In fact, this "merge.update" invocation will be replaced in the
subsequent patch to fix another problem, but this change is usefull to
inform reason why such complicated case should be tested.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 24 Aug 2014 23:47:25 +0900] rev 22283
largefiles: omit restoring standins if working parent is not rollbacked
For efficiency, this patch omits restoring standins and updating
lfdirstate, if the parent of the working directory is not rollbacked.
This patch adds the test not to confirm whether restoring is skipped
or not, but to detect unexpected regression in the future: it is
difficult to distinguish between skipping and perfectly restoring.
Matt Mackall <mpm@selenic.com> [Tue, 26 Aug 2014 13:11:53 +0200] rev 22282
repoview: fix 0L with pack/unpack for 2.4
Thomas De Schampheleire <thomas.de.schampheleire@gmail.com> [Mon, 25 Aug 2014 15:10:09 +0200] rev 22281
help: add pad function to template help
Commit
aa51392da507 introduced a pad function for use in templates, but did
not add the corresponding documentation to 'hg help templating'.
Mike Edgar <adgar@google.com> [Fri, 22 Aug 2014 16:40:34 -0400] rev 22280
histedit: use str.startswith to check for comments in action list
Mike Edgar <adgar@google.com> [Fri, 22 Aug 2014 16:37:55 -0400] rev 22279
histedit: drop duplicate line extracting keep option
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 23 Aug 2014 23:03:50 +0900] rev 22278
import: avoid editor invocation when importing with "--exact" for exact-ness
Before this patch, external editor is invoked when imported patch has
no commit message, even if "--exact" is specified. Then, exact-ness is
broken, because empty commit message causes failure of committing.
This patch avoids editor invocation at importing with "--exact" for
exact-ness, because commit message in the patch should be kept as it
is in such case, even if it is empty.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 23 Aug 2014 23:03:50 +0900] rev 22277
import: disallow meaningless combination of "--exact" and "--edit"
Before this patch, "hg import" allows combination of "--exact" and
"--edit", even though editing commit message breaks exact-ness.
This patch disallows meaningless combination of "--exact" and "--edit".
Razvan Cojocaru <razvan.cojocaru93@gmail.com> [Sun, 16 Mar 2014 17:31:31 +0200] rev 22276
config: highlight parse error caused by leading spaces (
issue3214)
Added "unexpected leading whitespace" message to parse error
when .hgrc has a line that starts with whitespace.
Helps new users unfamiliar with syntax of rc file.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 20 Aug 2014 22:52:56 -0700] rev 22275
test-config: add tests for invalid syntax
This was not tested and there is more to come in the next patch.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 19 Aug 2014 23:22:44 -0700] rev 22274
debugobsolete: add a --rev argument
This argument can be used to list markers relevant to a set of revisions. We
add a test for this option and the relevant computation in the same move.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 20 Aug 2014 18:11:23 -0700] rev 22273
obsolete: rename `allmarkers` to `getmarkers`
This function is going to gain a "nodes" argument to filter the markers to the
ones relevant to <nodes> only.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 20 Aug 2014 00:43:08 -0700] rev 22272
debugobsolete: add a way to record parent information
We add a ``--record-parents`` flag to debugobsolete. This can be used to record
parent information in the marker when the precursors are known locally. This
will be useful to test the "relevant markers" computation.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 19 Aug 2014 17:03:10 -0700] rev 22271
obsstore: add relevantmarkers method
We add a ``relevantmarkers`` method to fetch all markers that seem relevant to a
set of nodes. See function documentation about how this set is computed. This
will let us exchange only the markers that seem "relevant" to the set of
changesets related to a push or a pull.
The approach used to define "relevant" has been successfully tested in evolve
for 6 months.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 19 Aug 2014 16:53:53 -0700] rev 22270
obsstore: keep track of children information
We use the new `parents` field to build a dictionary of markers that touch
children of a node. This will be used to link prune markers to a set of
exchanged nodes.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 20 Aug 2014 17:36:54 -0700] rev 22269
push: check if local and remote support evolution during discovery
We can now directly prevent any evolution-related operation from happening by using
an empty set for outgoing markers. So we detect if no transfers should occur and
use an empty set in this case.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 19 Aug 2014 16:46:17 -0700] rev 22268
obsstore: drop outdated comment
This comment was associated with a now-defunct line.
Augie Fackler <raf@durin42.com> [Thu, 21 Aug 2014 10:07:30 -0400] rev 22267
cvsps: add two more tiebreakers in cscmp
test-convert-cvs.t has been a little flaky for a while now. Add an
extra tiebreaker in cscmp so that all the cases in the test will sort
reliably.
Without this patch, test-convert-cvs.t failed after 346 runs. With
this patch, I stopped trying to get it to fail after 615 runs. While
not conclusive, that makes me pretty optimistic that this is a working
fix.
Yuya Nishihara <yuya@tcha.org> [Sat, 16 Aug 2014 17:59:26 +0900] rev 22266
annotate: abort early if no file is specified
This change is intended to move the getdate function near the opmap table.
Siddharth Agarwal <sid0@fb.com> [Wed, 20 Aug 2014 15:07:25 -0700] rev 22265
purge: avoid full walks when directories aren't purged
If match.traversedir is not None, we're forced to do full walks. However when
we aren't purging directories we don't need to set match.traversedir to
anything.
This speeds up non-full walks such as the one hgwatchman makes possible. For
mozilla-central with hgwatchman enabled, 'hg purge --files' goes from 0.88
seconds to 0.22.
Siddharth Agarwal <sid0@fb.com> [Thu, 21 Aug 2014 16:05:29 -0700] rev 22264
clone: for local clones, copy over filtered branchcaches as well (
issue4286)
Local clones copy/hardlink over files directly, so the branchcaches should all
be valid. There's a slight chance that a read operation would update one of the
branchcaches, but we hold a lock over the source repo so they shouldn't cause
an invalid branchcache to be copied over, just a different, valid one.
Siddharth Agarwal <sid0@fb.com> [Thu, 21 Aug 2014 15:58:32 -0700] rev 22263
clone: for local clones, copy branchcache from the right location (
issue4286)
The unfiltered branchcache is in .hg/cache/branch2, not
.hg/store/cache/branch2.
Augie Fackler <raf@durin42.com> [Wed, 20 Aug 2014 14:33:59 -0400] rev 22262
obsolete: avoid 2-argument form of enumerate, which was new in Python 2.6
Augie Fackler <raf@durin42.com> [Wed, 20 Aug 2014 13:21:41 -0400] rev 22261
repoview: use util.sha1() instead of hashlib.sha1()
45b5cd948a4d accidentally broke Python 2.4 compatibility, this fixes it.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 18 Aug 2014 17:17:23 -0700] rev 22260
debugobsolete: display parents information from markers
Now that we have a new field, we need a way to visualize it.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 18 Aug 2014 17:14:27 -0700] rev 22259
obsmarkers: add a `parentnodes` method to retrieve parent information
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 18 Aug 2014 16:28:44 -0700] rev 22258
obsstore: also store the 'parents' field on disk
We now store the `parents` field on disk. We use the same strategy as for
`date`: We stick it into the metadata. This is slow and dirty, but this is also
the only way we currently have.
At some point we'll have a new obsstore format to store this properly.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 18 Aug 2014 17:06:08 -0700] rev 22257
obsstore: drop 'date' from the metadata dictionary
We are extracting the `date` information from the metadata at read time.
However, we failed to remove it from the metadata returned in the markers. This
is now fixed.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 18 Aug 2014 16:17:16 -0700] rev 22256
createmarkers: automatically record the parent of pruned changesets
We need this information to build the set of relevant markers during
exchanges. This can only be done at the `createmarkers` level since
the `obsstore.create` function does not have a repo and therefore has
no access to the parent information.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 18 Aug 2014 16:12:29 -0700] rev 22255
obsstore: add a `parents` argument to obsstore.create
We need a way to pass the information to the function. Some guru told me that
what's arguments are made for.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 18 Aug 2014 16:08:44 -0700] rev 22254
obsstore: add a `parents` field
This field is intended to store the parent of the precursor. This is useful to
attach pruned changesets to a set of exchanged changesets. We currently just
add the fields with a None value. None stands for "no data recorded".
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 19 Aug 2014 14:42:08 -0700] rev 22253
obsstore: add some documentation about the marker fields
As the number of fields grow, it makes sense to start documenting their contents.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 16 Aug 2014 10:43:59 +0900] rev 22252
transplant: change "editform" to distinguish merge commits from others
"editform" argument for "getcommiteditor" is decided according to the
format below:
EXTENSION[.COMMAND][.ROUTE]
- EXTENSION: name of extension
- COMMAND: name of command, if there are two or more commands in EXTENSION
- ROUTE: name of route, if there are two or more routes in COMMAND
This patch newly adds "normal" and "merge" as ROUTE, to distinguish
merge commits from other.
This patch adds 4 test patterns to test combination of "merge"(x2) and
"--continue"(x2).
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 16 Aug 2014 10:43:59 +0900] rev 22251
rebase: change "editform" to distinguish merge commits from others
"editform" argument for "getcommiteditor" is decided according to the
format below:
EXTENSION[.COMMAND][.ROUTE]
- EXTENSION: name of extension
- COMMAND: name of command, if there are two or more commands in EXTENSION
- ROUTE: name of route, if there are two or more routes in COMMAND
This patch newly adds "merge" as ROUTE, to distinguish merge commits
from other.
This patch passes bool as "ctxorbool" to "mergeeditform", because
working context has always 2 parents at this point. Dropping the
second parent of non-merging commits is executed in "concludenode".
Unlike other patches in this series (e.g. for "hg commit"), this patch
doesn't add "normal.normal"/"normal.merge" style ROUTEs, because there
is no "merge" case in "collapse" ROUTE.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 16 Aug 2014 10:43:59 +0900] rev 22250
import: change "editform" to distinguish merge commits from others
"editform" argument for "getcommiteditor" is decided according to the
format below:
COMMAND[.ROUTE]
- COMMAND: name of command
- ROUTE: name of route, if there are two or more routes in COMMAND
This patch uses "normal.normal" and "normal.merge" as ROUTE of
"editform" instead of "normal", to distinguish merge commits from
other in "hg import" without "--bypass" case.
This patch assumes "editform" variations for "hg import" below:
import.normal.normal
import.normal.merge
import.bypass.normal
import.bypass.merge
Unlike other patches in this series, this patch uses "editor.sh"
instead of "checkeditform.sh" for the name of the script to check
"HGEDITFORM", because it has to do more than checking "HGEDITFORM".
To invoke editor forcibly in "test-import-merge.t", this patch creates
the patch not having patch description as "merge.nomsg.diff".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 16 Aug 2014 10:43:59 +0900] rev 22249
commit: change "editform" to distinguish merge commits from other (--amend)
"editform" argument for "getcommiteditor" is decided according to the
format below:
COMMAND[.ROUTE]
- COMMAND: name of command
- ROUTE: name of route, if there are two or more routes in COMMAND
This patch uses "amend.normal" and "amend.merge" as ROUTE of
"editform" instead of "amend", to distinguish merge commits from other
in "hg commit --amend" case.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 16 Aug 2014 10:43:59 +0900] rev 22248
commit: change "editform" to distinguish merge commits from others
"editform" argument for "getcommiteditor" is decided according to the
format below:
COMMAND[.ROUTE]
- COMMAND: name of command
- ROUTE: name of route, if there are two or more routes in COMMAND
This patch uses "normal.normal" and "normal.merge" as ROUTE of
"editform" instead of "normal", to distinguish merge commits from
others in "hg commit" without "--amend" case.
This patch assumes "editform" variations for "hg commit" below:
commit.normal.normal
commit.normal.merge
commit.amend.normal
commit.amend.merge
"mergeeditform" is factored out for subsequent patches. It takes
"ctxorbool" argument, because context object can't be passed in some
cases.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 16 Aug 2014 10:19:26 -0700] rev 22247
test-ssh: verify that stderr from remote is printed (
issue4336)
The issue fixed in the previous patch was uncovered by implementing an
extension that printed additional output locally before the push command
completed. This test emulates that.
If this change is applied before the previous patch, the test will fail
on Linux, with the local output being printed before the "remote: "
lines.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 16 Aug 2014 10:28:59 -0700] rev 22246
posix: implement readpipe using non-blocking I/O (
issue4336)
On Linux, fstat().st_size of a pipe always returns 0, even if the
pipe has data available for reading. This meant that reading from
and subsequently printing the stderr pipe content after wireproto
commands over SSH meant that available data wasn't being printed.
We now implement pipe reading on POSIX by doing a non-blocking
read for all available data.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Aug 2014 20:02:18 -0700] rev 22245
platform: implement readpipe()
Reading all available data from a pipe has a platform-dependent
implementation.
This patch establishes platform.readpipe() by copying the
inline implementation in sshpeer.readerr(). The implementations
for POSIX and Windows are currently identical. The POSIX
implementation will be changed in a subsequent patch.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 15 Aug 2014 19:18:21 -0700] rev 22244
exchange: remove duplicated addition to pushop.stepdone
Not sure how it got there but it is useless.
Augie Fackler <raf@durin42.com> [Mon, 18 Aug 2014 20:23:37 -0400] rev 22243
exchange: drop superfluous parens
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 15 Aug 2014 19:03:42 -0700] rev 22242
push: add bookmarks to the unified bundle2 push
We use the `pushkey` part to exchange bookmark updates within the unified
bundle2 push. Note that this only applies on update (moving a bookmark known on both
sides) since bookmark export (creation of a new bookmark on remote) is apparently
done outside of the _push function.