Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 03 Aug 2015 05:57:45 -0700] rev 25907
histedit: remove useless 'else' clause
This 'else: pass' clause have no effect. We drop it for clarity.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 31 Jul 2015 15:46:49 -0700] rev 25906
histedit: make cleanupnode more robust
The goal of this function is to strip content out of the repository. We do not
really care if this content is visible or cleanup node not and we should proceed
anyway. None of the internal actions are subject to this, however, a third party
extension running arbitrary commands during histedit is affected by this.
Durham Goode <durham@fb.com> [Wed, 29 Jul 2015 13:21:03 -0700] rev 25905
convert: fix git convert using servers branches
The conversion from git to hg was reading the remote branch list directly from
the origin server. If the origin's branch had moved forward since the last git
fetch, it would return a git hash which didn't exist locally, and therefore the
branch was not converted.
This changes it to rely on the local repo's refs/remotes list of branches
instead, so it's completely cut off from the server.
Yuya Nishihara <yuya@tcha.org> [Sat, 24 Jan 2015 22:28:14 +0900] rev 25904
revrange: drop old-style parser in favor of revset (API)
Now revset can parse nullary ":" operator and existing "foo+bar" tags, we
don't need the old-style parser.
This means scmutil.revsingle(), revpair() and revrange() no longer accept
a binary nodeid. An integer revision is still allowed as it isn't ambiguous.
Yuya Nishihara <yuya@tcha.org> [Sun, 15 Mar 2015 14:45:26 +0900] rev 25903
tag: do not pass binary nullid to scmutil.revsingle()
Future patches will remove the old-style parser that happen to accept a
binary nodeid. A binary nodeid shouldn't be passed to scmutil.revrange()
because it is ambiguous. For example, bin('20' * 19 + '30') is valid binary
nodeid, but it can also be parsed as a revset expression, '0'.
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Jul 2015 23:30:17 +0900] rev 25902
revset: port parsing rule of old-style ranges from scmutil.revrange()
The old-style parser will be removed soon.
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Jul 2015 23:02:18 +0900] rev 25901
debugrevspec: pass lookup function to visualize fallback mechanism
The next patch will move the exceptional parsing of old-style ranges
to revset.tokenize(). This patch will allow us to see the result tree.
Note that the parsing result of '-a-b-c-' is incorrect at this changeset.
It will be fixed soon.
Javi Merino <merino.jav@gmail.com> [Mon, 03 Aug 2015 20:34:36 +0100] rev 25900
help: fix typo familar -> familiar
Anton Shestakov <av6@dwimlabs.net> [Sun, 02 Aug 2015 19:18:35 +0800] rev 25899
highlight: exit early on textual and unknown files (
issue3005)
When highlight extension encountered files that pygments didn't recognize, it
used to fall back to text lexer. Also, pygments uses TextLexer for .txt files.
This lexer is noop by design.
On bigger files, however, doing the noop highlighting resulted in noticeable
extra CPU work and memory usage: to show a 1 MB text file, hgweb required about
0.7s more (on top of ~3.8s, Q8400) and consumed about 100 MB of RAM more (on
top of ~150 MB).
Let's just exit the function when it's clear that nothing will be highlighted.
Due to how this pygmentize function works (it modifies the template in-place),
we can just return from it and everything else will work as if highlight
extension wasn't enabled.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 03 Aug 2015 14:16:51 -0700] rev 25898
histedit: extract a simpler function to process replacement on abort
The process replacement is building a full mapping to allow moving bookmarks and
creating obsolescence marker. We do not need the full logic for abort so we
extract it. It will be useful as abort is missing some data about the
replacement and can crash when third party extensions push it a bit too far.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 03 Aug 2015 14:05:42 -0700] rev 25897
merge with stable
Martin von Zweigbergk <martinvonz@google.com> [Mon, 20 Jul 2015 13:39:25 -0700] rev 25896
exchange: fix dead assignment
The assignment of the value from bundle2.processbundle() to 'r' is
unused. It is currently the same as its third argument (if given), and
since that argument may eventually go away (according to the method's
docstring), let's reassign the return value to 'op' instead to better
prepare for that.
Martin von Zweigbergk <martinvonz@google.com> [Mon, 20 Jul 2015 13:35:19 -0700] rev 25895
exchange: s/phase/bookmark/ in _pushb2bookmarks()
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 31 Jul 2015 15:11:07 -0700] rev 25894
histedit: backout
ebb5bb9bc32e
The faulty changeset use obsolescence marker to roll the repository back on
--abort. This is a problematic approach because --abort should be as close as an
actually transaction rollback as possible stripping all created data from the
repository (cf `hg rebase --abort` stripping all created changesets). Instead
ebb5bb9bc32e made all content created during the aborted histedit still
available in the repository adding obsolescence marker to make them hidden. This
will cause trouble to evolution user as a re-run of the same histedit (with
success) will likely result in the very same node to be "recreated" while
obsolescence marker would be in place for them. And canceling an obsoletion is
still a fairly complicated process.
This also rollback using obsmarkers instead of strip to clean up temporary node
on successful histedit run because the two change were not split in separated
changeset. Rolling that part back does not have significant consequence a will
have to be resubmitted independently
Siddharth Agarwal <sid0@fb.com> [Sun, 02 Aug 2015 21:56:38 -0700] rev 25893
test-bookmarks.t: avoid nested repo
This is (a) pretty unnecessary and (b) breaks tests for the third-party
hgwatchman extension, which doesn't support nested repos.
Yuya Nishihara <yuya@tcha.org> [Sun, 02 Aug 2015 12:16:19 +0900] rev 25892
revlog: remove unused shaoffset constants
Call sites were removed at
61c9bc3da402, "revlog: remove lazy index".
Yuya Nishihara <yuya@tcha.org> [Sun, 02 Aug 2015 01:14:11 +0900] rev 25891
revlog: correct comment about size of v0 index format
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 03 Aug 2015 11:34:27 -0700] rev 25890
merge with stable
Matt Mackall <mpm@selenic.com> [Fri, 31 Jul 2015 11:56:28 -0500] rev 25889
Added signature for changeset
21aa1c313b05
Matt Mackall <mpm@selenic.com> [Fri, 31 Jul 2015 11:56:24 -0500] rev 25888
Added tag 3.5 for changeset
21aa1c313b05
Matt Mackall <mpm@selenic.com> [Fri, 31 Jul 2015 10:49:15 -0500] rev 25887
i18n: fix unclosed inline span in pt_BR
This was causing test-gendoc.t to complain:
WARNING: Inline interpreted text or phrase reference start-string
without end-string.
Matt Mackall <mpm@selenic.com> [Fri, 31 Jul 2015 10:26:57 -0500] rev 25886
merge with i18n
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 31 Jul 2015 18:39:48 +0900] rev 25885
i18n-ja: synchronized with
7fcad0c4ef8c
Eugene Baranov <eug.baranov@gmail.com> [Wed, 22 Jul 2015 16:57:11 +0100] rev 25884
convert: when converting from Perforce use original local encoding by default
On Windows Perforce command line client uses default system locale to encode
output. Using 'latin_1' causes locale-specific characters to be replaced with
question marks. With this patch we will use default locale by default whilst
allowing to specify it explicity with 'convert.p4.encoding' config option.
This is a potentially breaking change for any scripts relying on output treated
as in 'latin_1' encoding.
Also because hgext.convert.convcmd overwrites detected default system locale
with UTF-8 we had to introduce an import cycle in hgext.convert.p4 to retrieve
originally detected encoding from hgext.convert.convcmd.
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 29 Jul 2015 11:37:36 -0300] rev 25883
i18n-pt_BR: synchronized with
3e84f40232c7
Eugene Baranov <eug.baranov@gmail.com> [Thu, 30 Jul 2015 00:58:05 +0100] rev 25882
convert: when getting file from Perforce concatenate data at the end
As it turned out, even when getting relatively small files, concatenating
string data every time when new chunk is received is very inefficient.
Maintaining a string list of data chunks and concatenating everything in one go
at the end seems much more efficient - in my testing it made getting 40 MB file
7 times faster, whilst converting of a particularly big changelist with some big
files went down from 20 hours to 3 hours.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 18 Jul 2015 17:10:28 -0700] rev 25881
help: scripting help topic
There are a lot of non-human consumers of Mercurial. And the challenges
and considerations for machines consuming Mercurial is significantly
different from what humans face.
I think there are enough special considerations around how machines
consume Mercurial that a dedicated help topic is warranted. I concede
the audience for this topic is probably small compared to the general
audience. However, lots of normal Mercurial users do things like create
one-off shell scripts for common workflows that I think this is useful
enough to be in the install (as opposed to, say, a wiki page - which
most users will likely never find).
This text is by no means perfect. But you have to start somewhere. I
think I did cover the important parts, though.
Matt Harbison <matt_harbison@yahoo.com> [Wed, 29 Jul 2015 21:31:56 -0400] rev 25880
convert: document convert.hg.startrev
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 30 Jul 2015 06:22:09 +0900] rev 25879
transplant: restore dirstate correctly at unexpected failure
Before this patch, transplant can't restore dirstate as expected at
failure other than one while patching. This causes:
- unexpected file status
- dirstate refers already rollback-ed parent
(only at failure of transplanting the 2nd or later revision)
To restore dirstate correctly also at unexpected failure, this patch
encloses scope of store lock and transaction by 'dirstateguard'.
This is temporary fixing for stable branch. See
DirstateTransactionPlan wiki page for detail about the future plan to
treat dirstate consistently around scope boundary of transaction.
https://mercurial.selenic.com/wiki/DirstateTransactionPlan
This patch also adds 'if lock' examination for safety
'lock.release()', because creating 'dirstateguard' object may fail
unexpectedly (e.g. IOError for saving dirstate).
BTW, in the test script, putting section header '[extensions]' into
'.hg/hgrc' is needed to fix incomplete disabling 'abort' extension at
4d1382fd96ff.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 30 Jul 2015 06:16:12 +0900] rev 25878
localrepo: make journal.dirstate contain in-memory changes before transaction
Before this patch, in-memory dirstate changes aren't written out at
opening transaction, even though 'journal.dirstate' is created
directly from '.hg/dirstate'.
Therefore, subsequent 'hg rollback' uses incomplete 'undo.dirstate' to
restore dirstate, if dirstate is changed and isn't written out before
opening transaction.
In cases below, the condition "dirstate is changed and isn't written
out before opening transaction" isn't satisfied and this problem
doesn't appear:
- "wlock scope" and "transaction scope" are almost equivalent
e.g. 'commit --amend', 'import' and so on
- dirstate changes are written out before opening transaction
e.g. 'rebase' (via 'dirstateguard') and 'commit -A' (by separated
wlock scopes)
On the other hand, 'backout' may satisfy the condition above.
To make 'journal.dirstate' contain in-memory changes before opening
transaction, this patch explicitly invokes 'dirstate.write()' in
'localrepository.transaction()'.
'dirstate.write()' is placed before not "writing journal files out"
but "invoking pretxnopen hooks" for visibility of dirstate changes to
external hook processes.
BTW, in the test script, 'touch -t
200001010000' and 'hg status' are
invoked to make file 'c' surely clean in dirstate, because "clean but
unsure" files indirectly cause 'dirstate.write()' at 'repo.status()'
in 'repo.commit()' (see
fe03f522dda9 for detail) and prevents from
certainly reproducing the issue.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 27 Jul 2015 21:27:24 -0400] rev 25877
dirstate: ensure mv source is marked deleted when walking icasefs (
issue4760)
Previously, importing a case-only rename patch on a case insensitive filesystem
caused the original file to be marked as '!' in status. The source was being
forgotten properly in patch.workingbackend.close(), but the call it makes to
scmutil.marktouched() then put the file back into the 'n' state (but it was
still missing from the filesystem).
The cause of this was scmutil._interestingfiles() would walk dirstate,
and since dirstate was able to lstat() the old file via the new name,
was treating this as a forgotten file, not a removed file.
scmutil.marktouched() re-adds forgotten files, so dirstate got out of
sync with the filesystem.
This could be handled with less code in the "kind == regkind or kind
== lnkkind" branch of dirstate._walkexplicit(), but this avoids
filesystem accesses unless case collisions occur. _discoverpath() is
used instead of normalize(), since the dirstate case is given first
precedence, and the old file is still in it. What matters is the
actual case in the filesystem.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 27 Jul 2015 17:39:09 -0400] rev 25876
extdiff: allow modifications in subrepos to be copied back
This check was a legacy bit from when the file data was being fetched manually
with 'ctx[wfn]', but archive() does that now.
49966b5ab16f seems to indicate
that this avoided a problem where a merge adds a file to another branch, and
that test still passes.
Unfortunately, I don't see a way to create a test that modifies the file in the
temporary directory before the command exits.
I wonder if the os.lstat() call needs to be wrapped in an exception handler for
the case where archive didn't create a file because the file didn't exist in
that revision. But I wasn't able to trigger a problem without it on a real
repository.
Yuya Nishihara <yuya@tcha.org> [Mon, 27 Jul 2015 22:14:40 +0900] rev 25875
ignore: fix path concatenation of .hgignore on Windows
Since
3de48ff62733, .hgignore is ignored on Windows because a pat may have
a drive letter, but pathutil.join is posixpath.join.
"z:\foo\bar/z:\foo\bar\.hgignore"
Instead, this patch uses os.path.join() and util.localpath() to process both
parts as file-system paths.
Maybe we can remove os.path.join() at dirstate._ignore because 'include:' is
resolved relative to repo root? It was introduced by
a04c7b74b3d5.
Wagner Bruna <wbruna@yahoo.com> [Sun, 26 Jul 2015 09:28:52 -0300] rev 25874
repair: fix typo in warning message
Anton Shestakov <av6@dwimlabs.net> [Sun, 26 Jul 2015 18:05:10 +0800] rev 25873
monoblue: link to branches on summary page
"Tags" and "Bookmarks" sections on this page already have the similar links,
and so does the "Branches" on summary page in gitweb, so let's do the same in
monoblue.
Anton Shestakov <av6@dwimlabs.net> [Sun, 26 Jul 2015 17:18:42 +0800] rev 25872
monoblue: fix branches link on help topics page
Anton Shestakov <av6@dwimlabs.net> [Sun, 26 Jul 2015 00:11:23 +0800] rev 25871
hgweb: show ages in repos' Last modified column in monoblue and gitweb
Index page, which shows the list of available repositories, has a column where
the last modification date for each repo is shown. paper, coal and spartan
already show the dates in relative format (e.g. "2 weeks ago"), because these
styles have the required process_dates() js function call in their footer
templates, which are included on every page. But monoblue and gitweb styles
have more things in the footer templates, such as repo name and its atom/rss
links, so they don't include the footer on index page (as this page doesn't
have a single repo context).
Let's call process_dates() without including the footer.
Durham Goode <durham@fb.com> [Fri, 24 Jul 2015 16:44:52 -0700] rev 25870
ignore: fix include: rules depending on current directory (
issue4759)
When reading pattern files, we just call open(path), which is relative to the
current directory. Let's fix this by resolving the paths before attempting to
read the file.
Durham Goode <durham@fb.com> [Fri, 24 Jul 2015 16:43:21 -0700] rev 25869
test: move ignore test run into a subdirectory
Previously the hgignore test just called hg init in the test directory. A future
patch needs to test hgignore stuff from outside of the repo, so let's move the
entire test repo into a subdirectory.
Anton Shestakov <av6@dwimlabs.net> [Mon, 13 Jul 2015 13:13:17 +0800] rev 25868
monoblue: show relative age of bookmarks
In
b24e5a708fad, age calculation was made dynamic (i.e. in javascript), but for
some reason bookmarkentry template in monoblue/map got a wrong class. It
resulted in /summary and /bookmarks pages always showing exact dates for
bookmarks, no age calculation was performed. Let's fix this by using "age"
class that is already used in branchentry and tagentry templates in the same
map file.
As usual, the exact date for such elements is still available in title
attribute, so it shows in a tooltip on hover.
Anton Shestakov <av6@dwimlabs.net> [Wed, 22 Jul 2015 10:19:17 +0800] rev 25867
highlight: produce correct markup when there's a blank line just before EOF
Due to how the colorized output from pygments was stripped of <pre> elements,
when there was an empty line at the end of a file, highlight extension produced
an incorrect markup (no closing tags from the fileline/annotateline template).
It wasn't usually noticeable, because browsers were smart enough to see where
the missing tags should've been, but in monoblue style it resulted in the last
line having twice the normal height.
Instead of awkwardly trying to strip outer <pre></pre> tags, let's make the
formatter with nowrap=True, which should do what we need in pygments since at
least 0.5 (2006-10-30).
Example from monoblue style:
Before:
<div class="source">
<div style="font-family:monospace" class="parity0">
<pre><a class="linenr" href="#l1" id="l1"> 1</a> </pre>
</div>
<div style="font-family:monospace" class="parity1">
<pre><a class="linenr" href="#l2" id="l2"> 2</a>
</div>
Now:
<div class="source">
<div style="font-family:monospace" class="parity0">
<pre><a class="linenr" href="#l1" id="l1"> 1</a> </pre>
</div>
<div style="font-family:monospace" class="parity1">
<pre><a class="linenr" href="#l2" id="l2"> 2</a> </pre>
</div>
</div>
(Notice the missing </pre></div> now in place)
Matt Harbison <matt_harbison@yahoo.com> [Mon, 20 Jul 2015 23:33:57 -0400] rev 25866
test-check-config: convert directory separators to '/' for MSYS
The output of the files command uses native separator. MSYS then seems to drop
the '\' on Windows when invoking python:
--- c:/Users/Matt/Projects/hg/tests/test-check-config-hg.t
+++ c:/Users/Matt/Projects/hg/tests/test-check-config-hg.t.err
@@ -6,22 +6,10 @@
$ hg files "set:(**.py or **.txt) - tests/**" |
> xargs python contrib/check-config.py Traceback (most recent call last):
File "contrib/check-config.py", line 93, in <module>
sys.exit(main(sys.argv[1:]))
File "contrib/check-config.py", line 24, in main
for l in open(f):
IOError: [Errno 2] No such file or directory: 'contriball-revsets.txt'
[123]
Matt Harbison <matt_harbison@yahoo.com> [Mon, 20 Jul 2015 22:48:42 -0400] rev 25865
test-subrepo: fix globs for Windows
It looks like these changes originated with
2538b87660be. I'm not sure that it
was intentional, but is seems harmless enough for an error message.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 20 Jul 2015 22:44:53 -0400] rev 25864
test-clone: fix globs for Windows
Danek Duvall <danek.duvall@oracle.com> [Mon, 20 Jul 2015 15:42:39 -0700] rev 25863
tests: diff -r on Solaris emits "Common subdirectories:"
When using the -r option to Solaris diff, any directores that compare
identically are mentioned in the output. We don't really care about these
directories for the purposes of this test, so ignore them.
Danek Duvall <danek.duvall@oracle.com> [Mon, 20 Jul 2015 15:39:15 -0700] rev 25862
tests: work around differing hunk headers between GNU and Solaris diff
The hunk headers specifying what lines the hunk apply to differ. They're
irrelevant to the test, so just eliminate them from the output.
Danek Duvall <danek.duvall@oracle.com> [Mon, 20 Jul 2015 15:33:20 -0700] rev 25861
tests: use egrep with regular expression branches for compatibility
GNU grep allows you to use "a\|b" in a regular expression to match either
"a" or "b", but at least Solaris grep does not; only egrep allows for that.
And egrep considers "a+" to be "a{1,}" instead of an "a" and a literal plus
sign, so escape that as well.
Yuya Nishihara <yuya@tcha.org> [Mon, 20 Jul 2015 23:38:56 +0900] rev 25860
parsers: silence warning of implicit integer conversion issued by clang
"-Wshorten-64-to-32" is enabled by default on Mac OS X. Because "len" should
be represented in 32bit integer, this patch simply cast ssize_t to int.