Wed, 11 Jul 2012 17:13:39 +0200 graphlog: extract ascii drawing code into graphmod
Patrick Mezard <patrick@mezard.eu> [Wed, 11 Jul 2012 17:13:39 +0200] rev 17179
graphlog: extract ascii drawing code into graphmod
Sun, 24 Jun 2012 18:11:52 +0200 patchbomb: rewrite getoutgoing() with revsets
Patrick Mezard <patrick@mezard.eu> [Sun, 24 Jun 2012 18:11:52 +0200] rev 17178
patchbomb: rewrite getoutgoing() with revsets Another version could have returned a revset expression from getoutgoing(), but we do not know how many times it will be resolved, so better do it once explicitely.
Sun, 24 Jun 2012 17:39:27 +0200 patchbomb: support --outgoing and revsets
Patrick Mezard <patrick@mezard.eu> [Sun, 24 Jun 2012 17:39:27 +0200] rev 17177
patchbomb: support --outgoing and revsets With --outgoing, input revisions were passed to getoutgoing() before being resolved.
Sat, 14 Jul 2012 19:21:31 +0200 patchbomb: make --outgoing ignore secret changesets
Patrick Mezard <patrick@mezard.eu> [Sat, 14 Jul 2012 19:21:31 +0200] rev 17176
patchbomb: make --outgoing ignore secret changesets getoutgoing() is just rewritten almost like revset.outgoing(), a follow-up will make it use revsets after the tests are adjusted.
Sun, 15 Jul 2012 14:48:50 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Sun, 15 Jul 2012 14:48:50 -0500] rev 17175
merge with stable
Fri, 06 Jul 2012 01:14:02 -0300 convert: make filemap renames consistently override revision renames stable
Wagner Bruna <wbruna@yahoo.com> [Fri, 06 Jul 2012 01:14:02 -0300] rev 17174
convert: make filemap renames consistently override revision renames When the source repository had a revision renaming "$new -> $old", but the filemap a "$old -> $new" rename, the converted revision could use either $new (deleting the file) or $old (keeping the file) when getting the file data, depending on the lexicographical order of those names. So the resulting revision would leave some files untouched (as expected), but delete others arbitrarely.
Fri, 06 Jul 2012 19:34:09 +0200 obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 06 Jul 2012 19:34:09 +0200] rev 17173
obsolete: compute extinct changesets `extinct` changesets are obsolete changesets with obsolete descendants only. They are of no interest anymore and can be: - exclude from exchange - hidden to the user in most situation - safely garbage collected This changeset just allows mercurial to detect them. The implementation is a bit naive, as for unstable changesets. We better use a simple revset query and a cache, but simple version comes first.
Tue, 10 Jul 2012 01:39:03 +0200 push: refuse to push unstable changesets without force
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 10 Jul 2012 01:39:03 +0200] rev 17172
push: refuse to push unstable changesets without force User should resolve unstability locally before pushing the same way we encourage user to merge locally instead of pushing a new remote head. If we are to push obsolete changeset, at least one set of the pushed set will be either obsolete or unstable. The check is narrowed to only heads.
Fri, 06 Jul 2012 00:18:09 +0200 obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 06 Jul 2012 00:18:09 +0200] rev 17171
obsolete: compute unstable changeset An unstable changeset is a changeset *not* obsolete but with some obsolete ancestors. The current logic to decide if a changeset is unstable is naive and very inefficient. A better solution is to compute the set of unstable changeset with a simple revset and to cache the result. But this require cache invalidation logic. Simpler version goes first.
Fri, 06 Jul 2012 19:29:10 +0200 revset: add an `obsolete` symbol
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 06 Jul 2012 19:29:10 +0200] rev 17170
revset: add an `obsolete` symbol This predicate matches obsolete changesets. This is a naive implementation to be improved later.
Tue, 10 Jul 2012 01:32:18 +0200 push: refuse to push obsolete changesets
Pierre-Yves David <pierre-yves.david@logilab.fr> [Tue, 10 Jul 2012 01:32:18 +0200] rev 17169
push: refuse to push obsolete changesets This is a first version. Simple but not very efficient. Note that this changeset introduce the "obsolete" word in the UI.
Thu, 05 Jul 2012 19:53:04 +0200 push: accept revset argument for --rev
Pierre-Yves David <pierre-yves.david@logilab.fr> [Thu, 05 Jul 2012 19:53:04 +0200] rev 17168
push: accept revset argument for --rev
Fri, 06 Jul 2012 19:48:19 +0200 check-code: recognise %= as an operator
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 06 Jul 2012 19:48:19 +0200] rev 17167
check-code: recognise %= as an operator
Wed, 04 Jul 2012 08:55:16 +0200 tests: do exclude what is expected
Simon Heimberg <simohe@besonet.ch> [Wed, 04 Jul 2012 08:55:16 +0200] rev 17166
tests: do exclude what is expected
Fri, 06 Jul 2012 00:48:45 +0200 parsers.c: remove warning: 'size' may be used uninitialized in this function
Mads Kiilerich <mads@kiilerich.com> [Fri, 06 Jul 2012 00:48:45 +0200] rev 17165
parsers.c: remove warning: 'size' may be used uninitialized in this function Some compilers / compiler options (such as gcc 4.7) would emit warnings: mercurial/parsers.c: In function 'pack_dirstate': mercurial/parsers.c:306:18: warning: 'size' may be used uninitialized in this function [-Wmaybe-uninitialized] mercurial/parsers.c:306:12: warning: 'mode' may be used uninitialized in this function [-Wmaybe-uninitialized] It is apparently not smart enough to figure out how the 'err' arithmetics makes sure that it can't happen. 'err' is now replaced with simple checks and goto. That might also help the optimizer when it is inlining getintat().
Wed, 11 Jul 2012 16:47:33 +0200 graphlog: remove unused ASCIIDATA constant
Patrick Mezard <patrick@mezard.eu> [Wed, 11 Jul 2012 16:47:33 +0200] rev 17164
graphlog: remove unused ASCIIDATA constant It was introduced by d9acbe7b0049, returned by asciiformat() but never read anywhere. 20140c249e63 stopped using it completely, and the graphmod.CHANGESET type is passed through all functions.
Wed, 11 Jul 2012 17:10:21 +0200 graphlog: make functions private, fix names
Patrick Mezard <patrick@mezard.eu> [Wed, 11 Jul 2012 17:10:21 +0200] rev 17163
graphlog: make functions private, fix names
Wed, 11 Jul 2012 17:05:20 +0200 graphlog: remove unused get_revs() function
Patrick Mezard <patrick@mezard.eu> [Wed, 11 Jul 2012 17:05:20 +0200] rev 17162
graphlog: remove unused get_revs() function
Fri, 06 Jul 2012 18:45:27 +0900 localrepo: use file API via vfs while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 06 Jul 2012 18:45:27 +0900] rev 17161
localrepo: use file API via vfs while ensuring repository directory As a part of migration to vfs, this patch invokes some file API indirectly via vfs, while ensuring repository directory in the constructor of "localrepository" class. New file API are added to "scmutil.abstractopener" class, because they are also used via other derived classes than "scmutil.opener". But "join()" is not yet defined other than "scmutil.opener" class, because it should not be used via other opener classes yet.
Fri, 06 Jul 2012 18:45:27 +0900 localrepo: use "vfs" intead of "opener" while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 06 Jul 2012 18:45:27 +0900] rev 17160
localrepo: use "vfs" intead of "opener" while ensuring repository directory As a part of migration to vfs, this patch uses "self.vfs" instead of "self.opener", while ensuring repository directory in the constructor of "localrepository" class.
Fri, 06 Jul 2012 18:45:27 +0900 localrepo: use the path relative to "self.vfs" instead of "path" argument
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 06 Jul 2012 18:45:27 +0900] rev 17159
localrepo: use the path relative to "self.vfs" instead of "path" argument As a part of migration to vfs, this patch uses "self.root", which can be recognized as the path relative to "self.vfs", instead of "path" argument. This fix allows to make invocations of "util.makedirs()" and "os.path.exists()" while ensuring repository directory in "localrepository.__init__()" ones indirectly via vfs. But this fix also raises issue 2528: "hg clone" with empty destination. "path" argument is empty in many cases, so this issue can't be fixed in the view of "localrepository.__init__()". Before this patch, it is fixed by empty-ness check ("not name") of exception handler in "util.makedirs()". try: os.mkdir(name) except OSError, err: if err.errno == errno.EEXIST: return if err.errno != errno.ENOENT or not name: raise This requires "localrepository.__init__()" to invoke "util.makedirs()" with "path" instead of "self.root", because empty "path" is treated as "current directory" and "self.root" becomes valid path. But "hg clone" with empty destination can be detected also in "hg.clone()" before "localrepository.__init__()" invocation, so this patch re-fixes issue2528 by checking it in "hg.clone()".
Fri, 06 Jul 2012 18:45:27 +0900 localrepo: use "self.wvfs.join()" instead of "os.path.join()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 06 Jul 2012 18:45:27 +0900] rev 17158
localrepo: use "self.wvfs.join()" instead of "os.path.join()" As a part of migration to vfs, this patch uses "self.wvfs.join()" instead of "os.path.join()", while initialization of fields in the constructor of "localrepository" class.
Fri, 06 Jul 2012 18:45:27 +0900 localrepo: use path expansion API via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 06 Jul 2012 18:45:27 +0900] rev 17157
localrepo: use path expansion API via vfs As a part of migration to vfs, this patch moves path expansion API invocations in the constructor of "localrepository" to the constructor of "opener", because the root path to the repository is very important to handle paths using non-ASCII characters correctly. This patch also rearrange initialization order of "wvfs" field, because it is required to initialize "self.root".
Fri, 06 Jul 2012 18:45:26 +0900 localrepo: add "vfs" fields to "localrepository" for migration from "opener"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 06 Jul 2012 18:45:26 +0900] rev 17156
localrepo: add "vfs" fields to "localrepository" for migration from "opener" As a part of migration to vfs, this patch adds "vfs" fields to "localrepository" class. This allows new codes to access current "opener" objects related to repositories via "vfs" fields, so patches referring to "vfs" will replace referring to "opener" in time. This patch also adds initializations for "vfs" fields to "statichttprepository" class derived from it, because its constructor doesn't invoke the constructor of "localrepository", so "vfs" fields should be initialized explicitly as same as "opener" fields: it has no working directory, so "wvfs" field is not added.
Fri, 13 Jul 2012 14:49:16 +0200 largefiles: optimize status by synchronizing lfdirstate with the largefile on update
Na'Tosha Bard <natosha@unity3d.com> [Fri, 13 Jul 2012 14:49:16 +0200] rev 17155
largefiles: optimize status by synchronizing lfdirstate with the largefile on update This speeds up status on a largefiles repo by synchronizing the largefiles dirstate to the largefile's mtime upon update, preventing the files from coming back as "unsure" later, requiring a check of the SHA1 sum.
Mon, 25 Jun 2012 15:14:06 -0700 store: abstract out how we retrieve a file's size
Bryan O'Sullivan <bryano@fb.com> [Mon, 25 Jun 2012 15:14:06 -0700] rev 17154
store: abstract out how we retrieve a file's size
Wed, 27 Jun 2012 22:03:27 +0900 mq: check subrepo synchronizations against parent of workdir or other appropriate context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 27 Jun 2012 22:03:27 +0900] rev 17153
mq: check subrepo synchronizations against parent of workdir or other appropriate context Before this patch, MQ checks each subrepo synchronizations against the working directory context, so ".hgsubstate" updating is not imported into MQ revision correctly in cases below: - qrefresh when current ".hgsubstate" is already synchronized with each subrepos: you can reproduce this easily by just twice or more qrefresh invocations - qnew just after rollback of commit which updates ".hgsubstate" This patch resolves this by checking subrepo states against: - the parent of "qtop" for qrefresh, or - the parent of working context otherwise
Wed, 27 Jun 2012 22:03:27 +0900 mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 27 Jun 2012 22:03:27 +0900] rev 17152
mq: create patch file after commit to import diff of ".hgsubstate" at qrefresh Even though the committed revision contains diff of ".hgsubstate", the patch file created by qrefresh doesn't contain it, because: - ".hgsubstate" is not listed up as one of target files of the patch for reasons below, so diff of ".hgsubstate" is not imported into patch file - status of ".hgsubstate" in working directory is usually "clean" - ".hgsubstate" is not specified explicitly by users - the patch file is created before commit processing which updates or creates ".hgsubstate" automatically, so there is no diff for it at that time This patch resolves this problem by: - putting ".hgsubstate" into target list of the patch, if needed: this allows "patch.diff()" to import diff of ".hgsubstate" into patch file. - creating the patch file after commit processing: this updates ".hgsubstate" before "patch.diff()" invocation. For the former fixing, this patch introduces "putsubstate2changes()" to share same implementation with qnew. This is invoked only once per qnew/qrefresh at most, so there is less performance impact. This patch also omits "match" argument for "patch.diff()" invocation, because "patch.diff()" ignores "match" if "changes" is specified.
Wed, 27 Jun 2012 22:03:22 +0900 mq: add ".hgsubstate" to patch target list only if it is not listed up yet
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 27 Jun 2012 22:03:22 +0900] rev 17151
mq: add ".hgsubstate" to patch target list only if it is not listed up yet If ".hgsubstate" is already listed up as one of commit targets, qnew put diff of ".hgsubstate" twice into the patch file stored under ".hg/patches". It causes rejections at applying such patches. Other than the case like in added test script, this can also occur when qnew is executed just after rolling back the committing updated ".hgsubstate". This patch checks whether ".hgsubstate" is already listed up as one of commit targets, and put it into the appropriate list only if it is not listed up yet.
Thu, 12 Jul 2012 14:20:34 -0500 backout e7167007c083
Matt Mackall <mpm@selenic.com> [Thu, 12 Jul 2012 14:20:34 -0500] rev 17150
backout e7167007c083 This may have allowed unbounded I/O sizes with the current chunk retrieval code.
(0) -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 +30000 tip