Commit Graph

34980 Commits

Author SHA1 Message Date
Pulkit Goyal
a0250b29d4 rewriteutil: use precheck() in uncommit and amend commands
Differential Revision: https://phab.mercurial-scm.org/D1526
2017-11-28 05:50:45 +05:30
Pulkit Goyal
4f214eeba8 rewriteutil: add a precheck function to check if revs can be rewritten
The precheck function is intended to be used before we start rewritting
changesets.

Differential Revision: https://phab.mercurial-scm.org/D1503
2017-11-24 03:44:50 +05:30
Pulkit Goyal
579e1d7f54 rewriteutil: add utility function to check if we can create new unstable cset
This patch adds a new file which will contain utility functions related to
rewritting changesets. It also adds a utility function to check if the
rewritting operation creates new unstable changesets and are we allowed to
create them.

This rewriteutil.py introduced in this patch and the utility functions added in
the upcoming patches exists in the evolve extension are being ported from there.

Differential Revision: https://phab.mercurial-scm.org/D1502
2017-11-24 03:40:33 +05:30
Jun Wu
af13a05eaa test-run-tests: do not rebuild hg in the test
d600bda4 and fc0f3ed0 added code to call `$PYTHON run-tests.py ...`. That
will rebuild hg, is slow and could have other crashes from setup.py, like:

  Unable to find a working hg binary to extract the version from the
  repository tags

Therefore use `run-tests.py -l` instead.

Differential Revision: https://phab.mercurial-scm.org/D1595
2017-12-05 12:23:48 -08:00
Pulkit Goyal
bc6c76e6f1 remotenames: consider existing data while storing newer data
Previously reviewed as D1357.

Differential Revision: https://phab.mercurial-scm.org/D1551
2017-11-09 12:10:03 +05:30
Pulkit Goyal
db8a9589fd remotenames: add functions to read remotenames data from .hg/remotenames/
This patch functions which can be used to read remotenames data from
.hg/remotenames/. The logic for the function which reads the remotenames file is
taken from the remotenames extension.

Previously reviewed as D940.

Differential Revision: https://phab.mercurial-scm.org/D1550
2017-10-05 01:31:53 +05:30
Pulkit Goyal
1ca9372e4c remotenames: add test showing overwriting on remotenames data
The current storage logic every time overwrites the existing data with the new
data. This patch adds test to demonstrate that. To fix this, we need to add
logic to read existing remotenames data and merge with existing data which will
be added in upcoming changesets.

Previously reviewed as D1356.

Differential Revision: https://phab.mercurial-scm.org/D1549
2017-11-10 22:54:59 +05:30
Pulkit Goyal
d680032136 remotenames: add functionality to store remotenames under .hg/hgremotenames/
This patch moves the functionality from remotenames extension to store
remotenames to core.

Storage format used by remotenames extension:

A single file `.hg/remotenames` with an entry in each line where each line is of
format:
`node nametype remotepath/name`
where nametype is either 'bookmarks' or 'branches'.

This was not the best way to store data, so while moving to core the storage
format was changed but yet not the final format. The storage format used by core
after this patch will be:

* A file for each type of name i.e. bookmarks and branches in .hg/remotenames/
  directory
* A version number on the top of the file. The version for current format is 0.
* An entry in each line where each line is of the format
`node\0remotepath\0name`

The logic to sync with existing remotenames file and saving journals and other
related things will be moved to core in next patches incrementally.

Thanks to Ryan, Augie and Durham for suggestions on storage format.

Previously reviewed as D939.

Differential Revision: https://phab.mercurial-scm.org/D1548
2017-10-05 00:44:38 +05:30
Pulkit Goyal
c2ca736b6e remotenames: move function to pull remotenames from the remoterepo to core
This patch is the first patch of the series moving functionality from
hgremotenames extension to core.

There are lot of functionality in the extension which in the end enables us to
store branch heads and bookmarks location on a server from which we are pulling
or cloning from. This will help us in creating a better bookmark workflow where
we can show user that a certain server has this bookmarks at this node. It will
also introduce namespaces related to remote bookmarks and remote branches.

This patch moves the functionality to pull branches and bookmarks from a
server from which we are pulling to core behind config option
`experimental.remotenames`.

This patch adds a test which helps us to analyse whether things are working or
not. We are currently writing things to ui, we will write information to files
in upcoming patches.

Previously reviewed as D937.

Differential Revision: https://phab.mercurial-scm.org/D1547
2017-10-05 00:02:02 +05:30
Boris Feld
f68fdd45d6 test: fix bad replace for fixing pure-only build
When we replaced the patterns, glob was removed on the fixed line, it was a
mistake and caused the pure-only build to fails.

Differential Revision: https://phab.mercurial-scm.org/D1592
2017-12-05 19:06:46 +01:00
Boris Feld
f12384139a test: fix common-pattern for pure variant
The $USUAL_COMPRESSIONS$ value that was taken was not compatible with the pure
variant systems as zlib seems to not be available in these case.

Differential Revision: https://phab.mercurial-scm.org/D1562
2017-11-29 23:20:52 -05:00
Matt Harbison
26d7de6319 tests: add a substitution for EADDRINUSE/WSAEADDRINUSE messages
I suspect some more of these are globbed out, so this is a bit of future
proofing.
2017-12-02 20:03:28 -05:00
Matt Harbison
aae64c603b tests: add a substitution for ECONNRESET/WSAECONNRESET messages 2017-12-02 20:10:58 -05:00
Matt Harbison
d0fab5d188 tests: add a substitution for ENOTDIR/ERROR_PATH_NOT_FOUND messages 2017-12-02 20:38:23 -05:00
Matt Harbison
d2dab77cb0 tests: add a substitution for ENOENT/ERROR_FILE_NOT_FOUND messages
Automatic replacement seems better than trying to figure out a check-code rule.
I didn't bother looking to see why the error message and file name is reversed
in the annotate and histedit tests, based on Windows or not.

I originally had this as a list of tuples, conditional on the platform.  But
there are a couple of 'No such file or directory' messages emitted by Mercurial
itself, so unconditional is required for stability.  There are also several
variants of what I assume is 'connection refused' and 'unknown host' in
test-clone.t and test-clonebundles.t for Docker, FreeBSD jails, etc.  Yes, these
are handled by (re) tags, but maybe it would be better to capture those strings
in order to avoid whack-a-mole in future tests.  All of this points to using a
dictionary containing one or more strings-to-be-replaced values.
2017-12-02 19:33:34 -05:00
Gregory Szorc
32f7e24bb4 setup: only write some autogenerated files if they change
Without this change, setup.py always writes some files on every
invocation. This prevents some builds from being a no-op when they
should. And, since times can sneak into generated .pyc files,
this prevents file content from being deterministic between
builds.

As part of the refactor, we treat file content as bytes.

The only potential regression from this would be if some tool
is looking at mtimes of the changed files to determine if
further action should be taken. But I don't think anything
critically important is keyed off the mtimes of these specific files.

Differential Revision: https://phab.mercurial-scm.org/D1580
2017-12-03 20:55:35 -08:00
Augie Fackler
35d780eef2 python3: whitelist many more passing tests
Differential Revision: https://phab.mercurial-scm.org/D1584
2017-12-04 15:30:30 -05:00
Yuya Nishihara
9bf6236a83 fancyopts: fix handling of "--" value in earlygetopt() 2017-11-25 17:30:50 +09:00
Yuya Nishihara
502549c773 fancyopts: use getopt.gnu_getopt()
The issue described in the docstring has been fixed since Python 20ab2260dc93,
which is in 2.7.

https://hg.python.org/cpython/rev/20ab2260dc93
https://bugs.python.org/issue4458

This fixes the handling of '--' value.
2017-11-24 01:09:00 +09:00
Yuya Nishihara
86043c7487 dispatch: replace _earlygetopt(strip=True) with new parser
The execution order in cmdalias.__init__() is adjusted to set stripped args
to self.givenargs, which is no longer updated in place.
2017-11-23 23:18:56 +09:00
Yuya Nishihara
c2c866a852 dispatch: replace _earlyreq*() with new fancyopts-based parser 2017-11-23 22:23:59 +09:00
Yuya Nishihara
2e53122de6 dispatch: alias --repo to --repository while parsing early options
This prepares for replacing old _early*opt() functions. My initial attempt
was to extend options table to support 'repository|repo' syntax. It worked,
but seemed too invasive. So I decided to add an optional argument to
fancyopts() instead.

This also changes the nevernegate dict to be keyed by a canonical_name,
not by an option-name for clarity.
2017-11-25 17:03:52 +09:00
Anton Shestakov
7187e609f7 spartan: render changesets server-side on /graph page 2017-12-04 19:08:41 +08:00
Anton Shestakov
7a357f1cf9 monoblue: render changesets server-side on /graph page 2017-12-04 18:26:54 +08:00
Anton Shestakov
55006fdcc2 gitweb: render changesets server-side on /graph page 2017-12-04 17:43:45 +08:00
Anton Shestakov
3c2de0ad20 paper: render changesets server-side on /graph page 2017-12-04 16:21:15 +08:00
Anton Shestakov
364b5723c5 hgweb: only include graph-related data in jsdata variable on /graph pages (BC)
Historically, client-side graph code was not only rendering the graph itself,
but it was also adding all of the changeset information to the page as well.
It meant that JavaScript code needed to construct valid HTML as a string
(although proper escaping was done server-side). It wasn't too clunky, even
though it meant that a lot of server-side things were duplicated client-side
for no good reason, but the worst thing about it was the data format it used.
It was somewhat future-proof, but not human-friendly, because it was just a
tuple: it was possible to append things to it (as was done in e.g.
4d7cfa1867b5), but you'd then have to remember the indices and reading the
resulting JS code wasn't easy, because cur[8] is not descriptive at all.

So what would need to happen for graph to have more features, such as more
changeset information or a different vertex style (branch-closing, obsolete)?
First you'd need to take some property, process it (e.g. escape and pass
through templatefilters function, and mind the encoding too), append it to
jsdata and remember its index, then go add nearly identical JavaScript code to
4 different hgweb themes that use jsdata to render HTML, and finally try and
forget how brittle it all felt. Oh yeah, and the indices go to double digits if
we add 2 more items, say phase and obsolescence, and there are more to come.
Rendering vertex in a different style would need another property (say,
character "o", "_", or "x"), except if you want to be backwards-compatible, it
would need to go after tags and bookmarks, and that just doesn't feel right.

So here I'm trying to fix both the duplication of code and the data format:

- changesets will be rendered by hgweb templates the same way as changelog and
  other such pages, so jsdata won't need any information that's not needed for
  rendering the graph itself

- jsdata will be a dict, or an Object in JS, which is a lot nicer to humans and
  is a lot more future-proof in the long run, because it doesn't use numeric
  indices

What about hgweb themes? Obviously, this will break all hgweb themes that
render graph in JavaScript, including 3rd-party custom ones. But this will also
reduce the size of client-side code and make it more uniform, so that it can be
shared across hgweb themes, further reducing its size. The next few patches
demonstrate that it's not hard to adapt a theme to these changes. And in a
later series, I'm planning to move duplicate JS code from */graph.tmpl to
mercurial.js and leave only 4 lines of code embedded in those <script>
elements, and even that would be just to allow redefining graph.vertex
function. So adapting a custom 3rd-party theme to these changes would mean:

- creating or copying graphnode.tmpl and adding it to the map file (if a theme
  doesn't already use __base__)

- modifying one line in graph.tmpl and simply removing the bigger part of
  JavaScript code from there

Making these changes in this patch and not updating every hgweb theme that uses
jsdata at the same time is a bit of a cheat to make this series more
manageable: /graph pages that use jsdata are broken by this patch, but since
there are no tests that would detect this, bisect works fine; and themes are
updated separately, in the next 4 patches of this series to ease reviewing.
2017-12-01 16:00:40 +08:00
Anton Shestakov
43f716d8d5 hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
ajaxScrollInit is a function that loads more elements (e.g. changelog entries)
when browser window is scrolled down to the bottom of the page. It basically
fetches the next page from the server as HTML, finds container element in that
document and "adopts" (essentially, moves) all its child nodes to the container
in the current document.

Currently, hgweb doesn't render any changesets on /graph page (everything is
done in JavaScript), so there are no children to adopt. But there will be soon,
so let's create a reusable function that does it.

Hardcoding #graphnodes selector is suboptimal, but graph code already does this
in two other places.
2017-12-01 14:17:20 +08:00
Matt Harbison
ed55294406 lfs: enable the extension locally after converting to an 'lfs' repo
This is consistent with clone and share in the previous commits.
2017-11-26 21:14:48 -05:00
Matt Harbison
fa06b74028 lfs: enable the extension locally after sharing a repo with 'lfs' requirement
This is consistent with clone in the previous commit.
2017-11-16 21:01:21 -05:00
Matt Harbison
26786fa7df lfs: enable the extension locally after cloning a repo with 'lfs' requirement
We do the same thing on clone for the largefiles extension, as a convenience.
Similar to largefiles, it's probably safer to only enable this extension on a
per repo basis because it is trivial to add an lfs file.  And that gives the
repository some centralized VCS characteristics.
2017-11-16 20:23:20 -05:00
Yuya Nishihara
2c811cd701 log: translate column labels at once (issue5750)
This makes sure that all columns are aligned. getlogcolumns() is hosted by
templatekw so the namespaces module can see it.

i18n/de.po is updated so test-log.t passes with no error. "obsolete:" and
"instability:" are kept untranslated.
2017-12-02 16:29:49 +09:00
Yuya Nishihara
9d926f0131 log: remove temporary variable 'date' used only once 2017-12-02 16:08:24 +09:00
Augie Fackler
bfcc4b085d merge with stable 2017-12-04 11:28:29 -05:00
Matt Harbison
ffc3cccdf4 convert: restore the ability to use bzr < 2.6.0 (issue5733)
This effectively conditionalizes 7ac081713920.  Some Linux distributions (like
CentOS 7) use really old versions, and the change referenced was causing
exceptions to be thrown.

Even though the deprecation warning says 'since 2.5.0', it wasn't marked as such
in 2.5.1, but is by 2.6.0.  This was tested with 2.4.2 and 2.6.0 with
PYTHONWARNINGS=::DeprecationWarning, and both paths were exercized.
2017-12-01 23:27:08 -05:00
Kevin Bullock
83140eecbb Added signature for changeset f51ae48a3fd9 2017-12-01 13:49:47 -06:00
Boris Feld
6fefecff91 lock: allow to configure when the lock messages are displayed
We add a new 'ui.timeout.warn' config to set a grace period before we display
lock related warning:

    waiting for lock on PATH held by PROCESS

The config is based on 'ui.timeout' and expresses a number of seconds before
the warning is displayed. Negative values disable the warning altogether.

The messages go to the debug output to help people trouble-shooting deadlocks.
2017-11-29 20:39:59 -05:00
Boris Feld
87115045d0 lock: add a trylock method handling the timeout and messaging logic
We are about to make the messages around lock more flexible. We move all the
currently logic into a function in the lock module. We'll update the message
scheme in the next changeset.
2017-11-29 20:36:29 -05:00
Boris Feld
ce5945f52a lock: use configint for 'ui.timeout' config
The ui object can do the conversion itself.
2017-11-29 21:00:02 -05:00
Boris Feld
d4021aee4f scmutil: improve format pattern used in nodesummaries
As spotted by Yuya Nishihara, that value is an integer.
2017-12-04 09:39:37 +01:00
Matt Harbison
c0662d6461 tests: trivial fixes for Windows 2017-12-02 17:52:53 -05:00
Pulkit Goyal
174b204536 py3: use encoding.strtolocal() to convert string to bytes
Differential Revision: https://phab.mercurial-scm.org/D1557
2017-11-29 08:40:25 +05:30
Pulkit Goyal
4aa252d4b0 py3: use pycompat.bytestr() or '%d' in place of str()
Differential Revision: https://phab.mercurial-scm.org/D1556
2017-11-29 08:39:48 +05:30
James May
12adeba8fa archive: pass thru mtime for directory archives, like other archive types do
Without this files in the output archive directory have their mtimes set to
whatever time they were written their.  This is in this inconsistent with
the other archivers, eg. zip, which use exactly the same time for all files.

Works on my machine (Windows), but I don't have a *nix box available to run
anything more thorough, unfortunately.
2017-12-01 17:39:21 +11:00
Anton Shestakov
41e5f7f794 hgweb: remove negative top from .info line in graph
"top: -Xpx" shifts a block up by X pixels, which can be used to visually
compress two lines of text to have less space between them, in this case it's
used for the changesets on /graph page. But not only it's not needed there
(both lines fit fine into their allowed vertical space), but it would also look
better (not as crammed, more vertically centered) without these negative
values.

"position: relative" is needed solely for the "top" property to have effect on
the element, no children of the .info element rely on it, so let's remove it as
well.
2017-12-01 20:33:02 +08:00
Pulkit Goyal
0456ca2613 unamend: drop unused vars, query after taking lock, use ctx.hex() for extras
This is the followup of review on D821.

Differential Revision: https://phab.mercurial-scm.org/D1579
2017-12-03 00:29:51 +05:30
Matt Harbison
a3597c86d6 test-lfs: drop a hack for ignoring convert devel-warnings
This was fixed on stable in 90e6d6ae632d.
2017-12-01 22:40:55 -05:00
Pulkit Goyal
6d1ddd1aef py3: use bytes in place of basestring
All strings in mercurial must be bytes so we can easily replace basestring with
bytes.

Differential Revision: https://phab.mercurial-scm.org/D1555
2017-12-01 16:53:55 +05:30
Martin von Zweigbergk
9ca0e39e98 amend: make a copy of "extra" to avoid mutating an input
I don't know of any problems this has caused, it just seems less
surprising.

Differential Revision: https://phab.mercurial-scm.org/D1575
2017-12-01 14:13:55 -08:00
Pulkit Goyal
262d41547f tests: removes bashism from test-unamend.t
FreeBSD builders fail because of bashism.

Differential Revision: https://phab.mercurial-scm.org/D1578
2017-12-02 06:32:41 +05:30