Tue, 29 Sep 2015 14:08:37 -0500 tests: fix test-bundle2-format output
Matt Mackall <mpm@selenic.com> [Tue, 29 Sep 2015 14:08:37 -0500] rev 26406
tests: fix test-bundle2-format output Forgot to amend.
Tue, 29 Sep 2015 21:57:08 +0900 localrepo: recreate phasecache if changelog was modified (issue4855) stable
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Sep 2015 21:57:08 +0900] rev 26405
localrepo: recreate phasecache if changelog was modified (issue4855) Because _phaserevs and _phasesets cache revision numbers, they must be invalidated if there are new commits or stripped revisions. We could do that by calling _phasecache.invalidate(), but it wasn't simple to be integrated with the filecache mechanism. So for now, phasecache will be recreated after repo.invalidate() if 00changelog.i was modified before.
Wed, 23 Sep 2015 12:56:12 -0700 bundle2: allow compressed bundle
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 23 Sep 2015 12:56:12 -0700] rev 26404
bundle2: allow compressed bundle This changeset adds support for a 'compression' parameter in bundle2 streams. When set, it controls the compression algorithm used for the payload part of the bundle2. There is currently no usage of this except in tests.
Mon, 28 Sep 2015 15:01:20 -0700 test-bundle2: dump bundle content using f --hexdump
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 28 Sep 2015 15:01:20 -0700] rev 26403
test-bundle2: dump bundle content using f --hexdump Thanks to Greg Szorc for pointing this out.
Fri, 25 Sep 2015 22:54:46 -0400 treemanifest: rework lazy-copying code (issue4840)
Augie Fackler <augie@google.com> [Fri, 25 Sep 2015 22:54:46 -0400] rev 26402
treemanifest: rework lazy-copying code (issue4840) The old lazy-copy code formed a chain of copied manifests with each copy. Under typical operation, the stack never got more than a couple of manifests deep and was fine. Under conditions like hgsubversion or convert, the stack could get hundreds of manifests deep, and eventually overflow the recursion limit for Python. I was able to consistently reproduce this by converting an hgsubversion clone of svn's history to treemanifests. This may result in fewer manifests staying in memory during operations like convert when treemanifests are in use, and should make those operations faster since there will be significantly fewer noop function calls going on. A previous attempt (never mailed) of mine to fix this problem tried to simply have all treemanifests only have a loadfunc - that caused somewhat weird problems because the gettext() callable passed into read() wasn't idempotent, so the easy solution is to have a loadfunc and a copyfunc.
Fri, 25 Sep 2015 17:18:28 -0400 manifest: rename treemanifest load functions to ease debugging
Augie Fackler <augie@google.com> [Fri, 25 Sep 2015 17:18:28 -0400] rev 26401
manifest: rename treemanifest load functions to ease debugging I'm hunting an infinite recursion bug at the moment, and having both of these methods named just _load is muddying the waters slightly.
Fri, 25 Sep 2015 17:17:36 -0400 manifest: add id(self) to treemanifest __repr__
Augie Fackler <augie@google.com> [Fri, 25 Sep 2015 17:17:36 -0400] rev 26400
manifest: add id(self) to treemanifest __repr__ Also rename __str__ to __repr__ since that's what we really want for pdb.
Mon, 28 Sep 2015 10:27:36 -0700 bundlerepo: let bundle repo look in the _mancache
Durham Goode <durham@fb.com> [Mon, 28 Sep 2015 10:27:36 -0700] rev 26399
bundlerepo: let bundle repo look in the _mancache When looking up a base revision, we were ignoring the contents that were already available in the manifest's _mancache. This patch allows us to use that data instead of reading from the revlog. This is useful in our pushrebase extension (which allows rebasing on the server side during a push) because it allows us to prefetch the bundle base manifest before aquiring the repo lock (1 second saving), which means doing less work inside the lock, which means a 20% higher commit rate.
Sun, 27 Sep 2015 22:19:54 +0900 check-seclevel: wrap entry point by function
Yuya Nishihara <yuya@tcha.org> [Sun, 27 Sep 2015 22:19:54 +0900] rev 26398
check-seclevel: wrap entry point by function This is intended to narrow scope of local variables. The global _verbose flag will be replaced later by ui.verbose.
Sun, 27 Sep 2015 22:16:24 +0900 check-seclevel: set executable bit as it has shebang
Yuya Nishihara <yuya@tcha.org> [Sun, 27 Sep 2015 22:16:24 +0900] rev 26397
check-seclevel: set executable bit as it has shebang
Wed, 23 Sep 2015 12:56:05 -0700 bundle20: extract core payload generation in its own function
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 23 Sep 2015 12:56:05 -0700] rev 26396
bundle20: extract core payload generation in its own function We are about to allow compressing the core of the bundle2. So we extract the generation of this bits in its own parts to make this compression phases easier in a later changesets.
Wed, 23 Sep 2015 14:00:16 -0700 unbundle20: allow registering handlers for stream level parameters
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 23 Sep 2015 14:00:16 -0700] rev 26395
unbundle20: allow registering handlers for stream level parameters As a comment in the code have been asking for, it is now possible to register piece of code that handle parameters for the stream. I've been wondering is such function should be class methods or not. I eventually went for externally decorated methods to stick with the culture of extensibility from an extensions that apply to bundle2.
Wed, 23 Sep 2015 11:55:27 -0700 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 23 Sep 2015 11:55:27 -0700] rev 26394
bundle2: allow to specify unsupported value on error A client may support an argument but not some of its values (eg: coming "compression" parameters). We allow this case to be carried in the exception.
Wed, 23 Sep 2015 11:44:52 -0700 bundle2: rename error exception class for unsupported feature
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 23 Sep 2015 11:44:52 -0700] rev 26393
bundle2: rename error exception class for unsupported feature The original name explicitly mention "Part", however it is also used outside of parts related feature. We rename from 'UnsupportedPartError' to 'BundleUnknownFeatureError' to fix this.
Wed, 23 Sep 2015 11:33:30 -0700 changegroup: use a different compression key for BZ in HG10
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 23 Sep 2015 11:33:30 -0700] rev 26392
changegroup: use a different compression key for BZ in HG10 For "space saving", bundle1 "strip" the first two bytes of the BZ stream since they always are 'BZ'. So the current code boostrap the uncompressor with 'BZ'. This hack is impractical in more generic case so we move it in a dedicated "decompression".
Sat, 26 Sep 2015 17:24:12 +0800 monoblue: provide links to branches, tags and bookmarks by name
Anton Shestakov <av6@dwimlabs.net> [Sat, 26 Sep 2015 17:24:12 +0800] rev 26391
monoblue: provide links to branches, tags and bookmarks by name This is adapted from cd842821db2c, that was added to paper for 3.5 release. It adds another way to refer to branches, tags and bookmarks in urls: by name. It's still possible to navigate to a specific changeset hash, but now you can get more descriptive urls straight from /summary page, for example. branchentry template (and so the whole branches table on /summary and /branches) lost the column that had a plain changeset hash, because tags and bookmarks don't have this column and also because there is already a way to address branch by its changeset hash (changeset link just next to it). Maybe we can instead bring this column with a plain changeset hash to tags and bookmarks, but this, more terse, new look feels fine.
Sat, 26 Sep 2015 17:15:58 +0800 gitweb: provide links to branches, tags and bookmarks by name
Anton Shestakov <av6@dwimlabs.net> [Sat, 26 Sep 2015 17:15:58 +0800] rev 26390
gitweb: provide links to branches, tags and bookmarks by name This is adapted from cd842821db2c, that was added to paper for 3.5 release. It adds another way to refer to branches, tags and bookmarks in urls: by name. It's still possible to navigate to a specific changeset hash, but now you can get more descriptive urls straight from /summary page, for example. branchentry template (and so the whole branches table on /summary and /branches) lost the column that had a plain changeset hash, because tags and bookmarks don't have this column and also because there is already a way to address branch by its changeset hash (changeset link just next to it). Maybe we can instead bring this column with a plain changeset hash to tags and bookmarks, but this, more terse, new look feels fine.
Fri, 25 Sep 2015 03:44:15 -0400 cmdutil: remove HG: prefix from translation strings
timeless@mozdev.org [Fri, 25 Sep 2015 03:44:15 -0400] rev 26389
cmdutil: remove HG: prefix from translation strings
Fri, 25 Sep 2015 03:47:48 -0400 i18n-zh_CN: annotate broken HG: translations
timeless@mozdev.org [Fri, 25 Sep 2015 03:47:48 -0400] rev 26388
i18n-zh_CN: annotate broken HG: translations
Thu, 24 Sep 2015 22:07:55 -0700 lock: recognize parent locks while acquiring
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 22:07:55 -0700] rev 26387
lock: recognize parent locks while acquiring This is part of a series that will allow locks to be inherited by subprocesses in limited circumstances. This patch enables the logic introduced in previous patches.
Thu, 24 Sep 2015 22:00:51 -0700 test-lock.py: fix testing for forks
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 22:00:51 -0700] rev 26386
test-lock.py: fix testing for forks The earlier test worked only because the held count went up to 2, so the first release brought it down to 1. Making a copy of the lock fixes that issue.
Thu, 24 Sep 2015 20:40:00 -0700 test-lock.py: allow PID to be changed in test state
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 20:40:00 -0700] rev 26385
test-lock.py: allow PID to be changed in test state This will be used in upcoming patches to create locks that appear as if they're being created by child processes.
Thu, 24 Sep 2015 20:22:59 -0700 test-lock.py: add a lock wrapper that allows faking the PID
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 20:22:59 -0700] rev 26384
test-lock.py: add a lock wrapper that allows faking the PID This will be used in upcoming patches to create locks that appear as if they're being created by child processes.
Thu, 24 Sep 2015 21:26:37 -0700 lock: add a wrapper to os.getpid() to make testing easier
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 21:26:37 -0700] rev 26383
lock: add a wrapper to os.getpid() to make testing easier This will allow us to fake locks across processes more easily.
Thu, 24 Sep 2015 19:52:34 -0700 test-lock.py: move temp dir generation to testcase
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 19:52:34 -0700] rev 26382
test-lock.py: move temp dir generation to testcase In upcoming patches we'll want to create multiple test state objects with a common test directory.
Thu, 24 Sep 2015 17:33:13 -0700 test-lock.py: copy-edit assertions about file existing
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 17:33:13 -0700] rev 26381
test-lock.py: copy-edit assertions about file existing Before: expected lock to exists but actually did not exists After: expected lock to exist but actually did not exist
Sat, 26 Sep 2015 21:43:13 -0700 revlog: don't flush data file after every added revision
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 26 Sep 2015 21:43:13 -0700] rev 26380
revlog: don't flush data file after every added revision The current behavior of revlogs is to flush the data file when writing data to it. Tracing system calls revealed that changegroup processing incurred numerous write(2) calls for values much smaller than the default buffer size (Python defaults to 4096, but it can be adjusted based on detected block size at run time by CPython). The reason we flush revlogs is so readers have all data available. For example, the current code in revlog.py will re-open the revlog file (instead of seeking an existing file handle) to read the text of a revision. This happens when starting a new delta chain when adding several revisions from changegroups, for example. Yes, this is likely sub-optimal (we should probably be sharing file descriptors between readers and writers to avoid the flushing and associated overhead of re-opening files). While flushing revlogs is necessary, it appears all callers are diligent about flushing files before a read is performed (see buildtext() in _addrevision()), making the flush in _writeentry() redundant and unncessary. So, we remove it. In practice, this means we incur a write(2) a) when the buffer is full (typically 4096 bytes) b) when a new delta chain is created rather than after every added revision. This applies to every revlog, but by volume it mostly impacts filelogs. Removing the redundant flush from _writeentry() significantly reduces the number of write(2) calls during changegroup processing on my Linux machine. When applying a changegroup of the hg repo based on my local repo, the total number of write(2) calls during application of the mercurial/localrepo.py revlogs dropped from 1,320 to 217 with this patch applied. Total I/O related system calls dropped from 1,577 to 474. When unbundling a mozilla-central gzipped bundle (264,403 changesets with 1,492,215 changes to 222,507 files), total write(2) calls dropped from 1,252,881 to 827,106 and total system calls dropped from 3,601,259 to 3,178,636 - a reduction of 425,775! While the system call reduction is significant, it appears to have no impact on wall time on my Linux and Windows machines. Still, fewer syscalls is fewer syscalls. Surely this can't hurt. If nothing else, it makes examining remaining system call usage simpler and opens the door to experimenting with the performance impact of different buffer sizes.
Sun, 27 Sep 2015 16:08:18 -0700 revlog: use existing file handle when reading during _addrevision
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 16:08:18 -0700] rev 26379
revlog: use existing file handle when reading during _addrevision _addrevision() may need to read from revlogs as part of computing deltas. Previously, we would flush existing file handles and open a new, short-lived file handle to perform the reading. If we have an existing file handle, it seems logical to reuse it for reading instead of opening a new file handle. This patch makes that the new behavior. After this patch, revlog files are only reopened when adding revisions if the revlog is switched from inline to non-inline. On Linux when unbundling a bundle of the mozilla-central repo, this patch has the following impact on system call counts: Call Before After Delta write 827,639 673,390 -154,249 open 700,103 684,089 -16,014 read 74,489 74,489 0 fstat 493,924 461,896 -32,028 close 249,131 233,117 -16,014 stat 242,001 242,001 0 lstat 18,676 18,676 0 lseek 20,268 20,268 0 ioctl 14,652 13,173 -1,479 TOTAL 3,180,758 2,930,679 -250,079 It's worth noting that many of the open() calls fail due to missing files. That's why there are many more open() calls than close(). Despite the significant system call reduction, this change does not seem to have a significant performance impact on Linux. On Windows 10 (not a VM, on a SSD), this patch appears to reduce unbundle time for mozilla-central from ~960s to ~920s. This isn't as significant as I was hoping. But a decrease it is nonetheless. Still, Windows unbundle performance is still >2x slower than Linux. Despite the lack of significant gains, fewer system calls is fewer system calls. If nothing else, this will narrow the focus of potential areas to optimize in the future.
Sun, 27 Sep 2015 15:59:19 -0700 revlog: always open revlogs for reading and appending
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 15:59:19 -0700] rev 26378
revlog: always open revlogs for reading and appending An upcoming patch will teach revlogs to use the existing file handle to read revision data instead of opening a new file handle just for quick reads. For this to work, files must be opened for reading as well. This patch is merely cosmetic: there are no behavior changes.
Sun, 27 Sep 2015 15:48:35 -0700 revlog: support using an existing file handle when reading revlogs
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 15:48:35 -0700] rev 26377
revlog: support using an existing file handle when reading revlogs Currently, the low-level revlog reading code always opens a new file handle. In some key scenarios, the revlog is already opened and an existing file handle could be used to read. This patch paves the road to that by teaching various revlog reading functions to accept an optional existing file handle to read from.
Sun, 27 Sep 2015 15:31:50 -0700 revlog: add docstring for checkinlinesize()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 15:31:50 -0700] rev 26376
revlog: add docstring for checkinlinesize() The name is deceptive: it does more than just "check." Add a docstring to clarify what's going on.
Sun, 27 Sep 2015 18:46:53 -0700 windows: insert file positioning call between reads and writes
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 27 Sep 2015 18:46:53 -0700] rev 26375
windows: insert file positioning call between reads and writes fopen() and fdopen() have a unique-to-Windows requirement that transitions between read and write operations in files opened in modes r+, w+, and a+ perform a file positioning call (fsetpos, fseek, or rewind) in between. While the MSDN docs don't say what will happen if this is not done, observations reveal that Python raises an IOError with errno 0. Furthermore, I /think/ this behavior isn't deterministic. But I can reproduce it reliably with subsequent patches applied that open revlogs in a+ mode and perform both reads and writes. This patch introduces a proxy class for file handles opened in r+, w+, and a+ mode on Windows. The class intercepts calls and audits whether a file positioning function has been called between read and write operations. If not, a dummy, no-op seek to the current file position is performed. This appears to be sufficient to "trick" Windows into allowing transitions between read and writes without raising errors.
Sat, 26 Sep 2015 15:20:32 +0900 tests: suppress verbose output of svn transaction
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Sep 2015 15:20:32 +0900] rev 26374
tests: suppress verbose output of svn transaction Subversion 1.9 shows more verbose messages than 1.8 and the tests fail because of them. These outputs are not important in our tests, so let's suppress them by -q or grep -v.
Wed, 23 Sep 2015 21:54:47 +0900 formatter: use dict.update() to set arguments passed to write functions
Yuya Nishihara <yuya@tcha.org> [Wed, 23 Sep 2015 21:54:47 +0900] rev 26373
formatter: use dict.update() to set arguments passed to write functions This isn't important, but update() is better than loop in general.
Wed, 23 Sep 2015 21:51:48 +0900 formatter: verify number of arguments passed to write functions
Yuya Nishihara <yuya@tcha.org> [Wed, 23 Sep 2015 21:51:48 +0900] rev 26372
formatter: verify number of arguments passed to write functions zip() takes the shortest length, which can be a source of bug.
Sat, 26 Sep 2015 11:50:47 +0900 help: unify handling of DEPRECATED/EXPERIMENTAL keywords
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Sep 2015 11:50:47 +0900] rev 26371
help: unify handling of DEPRECATED/EXPERIMENTAL keywords This fixes listexts() to exclude translated "(DEPRECATED)" marker correctly. On the other hand, help_() doesn't need translated keywords, but I don't think it's worth to separate untranslated keywords just for it.
Sat, 26 Sep 2015 11:38:39 +0900 help: include parens in DEPRECATED/EXPERIMENTAL keywords
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Sep 2015 11:38:39 +0900] rev 26370
help: include parens in DEPRECATED/EXPERIMENTAL keywords In some languages that have no caps, "DEPRECATED" and "deprecated" can be translated to the same byte sequence. So it is too wild to exclude messages by _("DEPRECATED").
Sat, 26 Sep 2015 11:25:38 +0900 help: define list of keywords that should be excluded from non-verbose output
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Sep 2015 11:25:38 +0900] rev 26369
help: define list of keywords that should be excluded from non-verbose output This list will be reused by the other deprecated/experimental handling.
Fri, 25 Sep 2015 23:10:47 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Fri, 25 Sep 2015 23:10:47 -0500] rev 26368
merge with stable
Fri, 25 Sep 2015 13:30:49 -0700 unbundle: cleanly abort on unknown bundle2 feature stable
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 25 Sep 2015 13:30:49 -0700] rev 26367
unbundle: cleanly abort on unknown bundle2 feature The exception wasn't caught and resulted in a traceback.
Mon, 14 Sep 2015 19:25:34 -0400 phases: return zero for no-op operations (issue4751) (BC)
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Mon, 14 Sep 2015 19:25:34 -0400] rev 26366
phases: return zero for no-op operations (issue4751) (BC) It is rather unhelpful to return 1 if there were no changes because the request matches the current state of phases. So we just undo that.
Thu, 24 Sep 2015 14:45:17 -0400 help: add config.troubleshooting section at the top
timeless@mozdev.org [Thu, 24 Sep 2015 14:45:17 -0400] rev 26365
help: add config.troubleshooting section at the top
Fri, 25 Sep 2015 11:16:20 -0400 dispatch: don't stack trace on commands like `hg .log`
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 25 Sep 2015 11:16:20 -0400] rev 26364
dispatch: don't stack trace on commands like `hg .log` This used to stack trace because it raised a util.Abort which wasn't handled in this block. We now handle it. Additionally, we error out earlier instead of plodding on and showing the "log" entry of the plain `hg help` output.
Fri, 25 Sep 2015 12:38:20 +0800 gitweb, monoblue: port highlighting linked lines from paper
Anton Shestakov <av6@dwimlabs.net> [Fri, 25 Sep 2015 12:38:20 +0800] rev 26363
gitweb, monoblue: port highlighting linked lines from paper This is adapted from 41c4bdd1d585, fbfe5748ef3e and f3393d458bf5.
Fri, 25 Sep 2015 03:02:38 +0800 gitweb, monoblue: fix vertical align of spans in .sourcelines
Anton Shestakov <av6@dwimlabs.net> [Fri, 25 Sep 2015 03:02:38 +0800] rev 26362
gitweb, monoblue: fix vertical align of spans in .sourcelines Empty lines in file view could produce an inexplicable margin before the next line (most noticeable in browsers on webkit/blink engine). That was making empty lines seem taller than the rest. Instead of using default vertical align, let's set it to 'top'. This issue is actually present in paper, and only recently got into gitweb (2239626369f5) and monoblue (119202d4d7a4). There's a bit more to it in paper, so that will be dealt with in a future patch. Recipe to see live: preferably using a webkit/blink browser, such as chromium, browse a file with empty lines, e.g. https://selenic.com/hg/file/3.5/README#l8 Selecting a block of text that includes empty lines will reveal white "breaks" in the selection. Highlighted line (#l8) also shows such a break below itself.
Fri, 25 Sep 2015 00:54:20 -0400 merge: fix mergestate comment
timeless@mozdev.org [Fri, 25 Sep 2015 00:54:20 -0400] rev 26361
merge: fix mergestate comment
Thu, 24 Sep 2015 17:51:05 -0400 rebase: avoid losing branch commits with --keepbranch (issue4835)
timeless@mozdev.org [Thu, 24 Sep 2015 17:51:05 -0400] rev 26360
rebase: avoid losing branch commits with --keepbranch (issue4835)
Thu, 24 Sep 2015 16:03:26 -0700 lock.release: do not unlink inherited locks
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 16:03:26 -0700] rev 26359
lock.release: do not unlink inherited locks This is part of a series that will allow locks to be inherited by subprocesses in limited circumstances. A subprocess unlinking a lock will lead to potential corruption from other concurrent processes.
Thu, 24 Sep 2015 16:00:41 -0700 lock: add a method to reacquire the lock after subprocesses exit
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 16:00:41 -0700] rev 26358
lock: add a method to reacquire the lock after subprocesses exit This is part of a series that will allow locks to be inherited by subprocesses in limited circumstances.
Thu, 24 Sep 2015 10:37:13 -0700 lock: add a method to prepare the lock for inheritance
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 10:37:13 -0700] rev 26357
lock: add a method to prepare the lock for inheritance This is part of a series that will allow locks to be inherited by subprocesses in limited circumstances.
Thu, 24 Sep 2015 15:57:11 -0700 lock: introduce state to keep track of inheritance
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 15:57:11 -0700] rev 26356
lock: introduce state to keep track of inheritance This is part of a series that will allow locks to be inherited by subprocesses in limited circumstances. In upcoming patches we will refer to this state.
Thu, 24 Sep 2015 10:53:16 -0700 error: add an exception to indicate lock inheritance API contract violations
Siddharth Agarwal <sid0@fb.com> [Thu, 24 Sep 2015 10:53:16 -0700] rev 26355
error: add an exception to indicate lock inheritance API contract violations
Thu, 24 Sep 2015 15:52:11 -0700 clone: check update rev for being True
Sean Farley <sean@farley.io> [Thu, 24 Sep 2015 15:52:11 -0700] rev 26354
clone: check update rev for being True In 30be3aeb5344, there was an attempt to fallback to looking up the update revision assuming it was always a rev but the documentation states: True means update to default rev, anything else is treated as a revision Therefore, we should only fallback to looking up the update rev if it is not True. This bug was found in hg-git and I couldn't think of a test that does this in pure Mercurial since the source repository is checked for the revision as well (and therefore gracefully falls back).
Thu, 24 Sep 2015 15:47:23 -0700 clone: fix over-indented continuation line
Sean Farley <sean@farley.io> [Thu, 24 Sep 2015 15:47:23 -0700] rev 26353
clone: fix over-indented continuation line
Fri, 25 Sep 2015 03:51:46 -0400 resolve: consistently describe re-merge + unresolved
timeless@mozdev.org [Fri, 25 Sep 2015 03:51:46 -0400] rev 26352
resolve: consistently describe re-merge + unresolved
Thu, 10 Sep 2015 16:53:07 +0200 mercurial: add debugextensions command (issue4676)
liscju <piotr.listkiewicz@gmail.com> [Thu, 10 Sep 2015 16:53:07 +0200] rev 26351
mercurial: add debugextensions command (issue4676) Add debugextensions command to help users debug their extension problems. If there are no extensions command prints nothing, otherwise it prints names of extension modules. If quiet or verbose option is not specified it prints(after extensions name) last version of mercurial in which given module was tested for non internal modules or not tested with user mercurial version. If verbose is specified it prints following information for every extension: extension name, import source, testedwith and buglink information. Extensions are printed sorted by extension name.
Thu, 24 Sep 2015 10:15:37 +0300 dispatch: stop warning about EPIPE in --debug mode
Daniel Colascione <dancol@fb.com> [Thu, 24 Sep 2015 10:15:37 +0300] rev 26350
dispatch: stop warning about EPIPE in --debug mode It seems silly for "hg --debug manifest | less" to print a scary message after the user hits "q" in less. hg should just exit silently instead, since EPIPE on stdout is a perfectly reasonable result.
Mon, 14 Sep 2015 17:31:48 -0700 rebase: don't rebase obsolete commit whose successor is already rebased
Laurent Charignon <lcharignon@fb.com> [Mon, 14 Sep 2015 17:31:48 -0700] rev 26349
rebase: don't rebase obsolete commit whose successor is already rebased This patch avoids unnecessary conflicts to resolve during rebase for the users of changeset evolution. This patch modifies rebase to skip obsolete commits if they are being rebased on their successors. It introduces a new rebase state 'revprecursor' for these revisions that are being skipped and a new message to inform the user of what is happening. This feature is gated behind the config flag experimental.rebaseskipobsolete When an obsolete commit is skipped, the output is: not rebasing 14:9ad579b4a5de "I", already in destination as 17:fc37a630c901 "K"
Thu, 24 Sep 2015 00:34:15 -0700 check-code: forbid mutable value for default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:34:15 -0700] rev 26348
check-code: forbid mutable value for default argument default value are common to all call. Using mutable value is a classical source of bug in Python. We forbid it. The regexp (Courtesy of Matt Mackall) is only catching such value on the first line of a definition, but that will be good enough for now.
Thu, 24 Sep 2015 00:54:30 -0700 httpconnection: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:54:30 -0700] rev 26347
httpconnection: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:52:21 -0700 transplant: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:52:21 -0700] rev 26346
transplant: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:50:06 -0700 mq: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:50:06 -0700] rev 26345
mq: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs. The underlying function already handle "None" as an option value, so we do not need to do anything else.
Thu, 24 Sep 2015 00:49:02 -0700 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:49:02 -0700] rev 26344
largefiles: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:48:24 -0700 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:48:24 -0700] rev 26343
largefiles: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:48:02 -0700 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:48:02 -0700] rev 26342
largefiles: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:46:37 -0700 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:46:37 -0700] rev 26341
largefiles: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:46:12 -0700 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:46:12 -0700] rev 26340
largefiles: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:44:59 -0700 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:44:59 -0700] rev 26339
largefiles: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:44:32 -0700 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:44:32 -0700] rev 26338
largefiles: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:41:43 -0700 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:41:43 -0700] rev 26337
largefiles: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:40:53 -0700 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:40:53 -0700] rev 26336
largefiles: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:38:34 -0700 histedit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:38:34 -0700] rev 26335
histedit: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 01:07:09 -0700 templater: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:07:09 -0700] rev 26334
templater: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 01:06:41 -0700 templater: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:06:41 -0700] rev 26333
templater: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 01:06:10 -0700 templater: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:06:10 -0700] rev 26332
templater: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 01:05:21 -0700 templater: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:05:21 -0700] rev 26331
templater: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 01:04:58 -0700 templater: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:04:58 -0700] rev 26330
templater: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 01:04:10 -0700 addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:04:10 -0700] rev 26329
addremove: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 01:00:43 -0700 match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:00:43 -0700] rev 26328
match: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs. We added support for None in the underlying function in the parent commit. therefore we do not need to do anything but passing None.
Thu, 24 Sep 2015 01:00:25 -0700 match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:00:25 -0700] rev 26327
match: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 01:00:05 -0700 match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:00:05 -0700] rev 26326
match: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:59:26 -0700 match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:59:26 -0700] rev 26325
match: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 01:58:33 -0700 addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 01:58:33 -0700] rev 26324
addremove: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Thu, 24 Sep 2015 00:56:30 -0700 tag: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:56:30 -0700] rev 26323
tag: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs. We just added support of None for the underlying function, so nothing else the required.
Thu, 24 Sep 2015 00:56:18 -0700 commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 24 Sep 2015 00:56:18 -0700] rev 26322
commit: remove a mutable default argument Mutable default arguments are know to the state of California to cause bugs.
Tue, 22 Sep 2015 14:09:42 -0700 lock: move acquirefn call to inside the lock
Siddharth Agarwal <sid0@fb.com> [Tue, 22 Sep 2015 14:09:42 -0700] rev 26321
lock: move acquirefn call to inside the lock We're going to need to call it again as part of reinitialization after a subprocess inherits the lock.
Tue, 22 Sep 2015 13:25:41 -0700 localrepo: call lock.lock with releasefn as a keyword arg
Siddharth Agarwal <sid0@fb.com> [Tue, 22 Sep 2015 13:25:41 -0700] rev 26320
localrepo: call lock.lock with releasefn as a keyword arg We'll be adding an acquirefn argument soon, and this makes that clearer.
Wed, 19 Aug 2015 15:11:17 -0500 copies: move debug statement to appropriate place
Matt Mackall <mpm@selenic.com> [Wed, 19 Aug 2015 15:11:17 -0500] rev 26319
copies: move debug statement to appropriate place
Wed, 19 Aug 2015 14:05:42 -0500 bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com> [Wed, 19 Aug 2015 14:05:42 -0500] rev 26318
bidmerge: choose shortest list of diverge and rename/delete warnings Slightly less arbitrary than choosing the first set.
Wed, 19 Aug 2015 14:04:54 -0500 copies: rename diverge2 to divergeset for clarity
Matt Mackall <mpm@selenic.com> [Wed, 19 Aug 2015 14:04:54 -0500] rev 26317
copies: rename diverge2 to divergeset for clarity
Wed, 19 Aug 2015 13:40:18 -0500 copies: begin separating mergecopies sides
Matt Mackall <mpm@selenic.com> [Wed, 19 Aug 2015 13:40:18 -0500] rev 26316
copies: begin separating mergecopies sides
Wed, 19 Aug 2015 13:09:54 -0500 copies: rename ctx() to getfctx() for clarity
Matt Mackall <mpm@selenic.com> [Wed, 19 Aug 2015 13:09:54 -0500] rev 26315
copies: rename ctx() to getfctx() for clarity
Wed, 23 Sep 2015 16:02:35 +0800 monoblue: port code selection without line numbers from gitweb
Anton Shestakov <av6@dwimlabs.net> [Wed, 23 Sep 2015 16:02:35 +0800] rev 26314
monoblue: port code selection without line numbers from gitweb This is adapted from 2239626369f5. It also fixes issue4790 in monoblue; tab characters now have meaningful width on the modified pages (file view, file diff, changeset).
Tue, 22 Sep 2015 15:10:24 -0500 help: copy-edit description of ui.supportcontact
Kevin Bullock <kbullock@ringworld.org> [Tue, 22 Sep 2015 15:10:24 -0500] rev 26313
help: copy-edit description of ui.supportcontact
Tue, 22 Sep 2015 16:56:34 -0700 ui: avoid mutable default arguments
Siddharth Agarwal <sid0@fb.com> [Tue, 22 Sep 2015 16:56:34 -0700] rev 26312
ui: avoid mutable default arguments I almost introduced a bug around this code by accidentally mutating a default argument. There's no reason for these to exist. It is OK to not assign {} to environ in ui.system because util.system knows how to deal with that.
Tue, 22 Sep 2015 16:55:18 -0700 util: avoid mutable default arguments
Siddharth Agarwal <sid0@fb.com> [Tue, 22 Sep 2015 16:55:18 -0700] rev 26311
util: avoid mutable default arguments I almost introduced a bug around this code by accidentally mutating a default argument. There's no reason for these to exist.
Sun, 13 Sep 2015 18:01:01 +0900 obsstore: fast path to check if obsstore is empty
Yuya Nishihara <yuya@tcha.org> [Sun, 13 Sep 2015 18:01:01 +0900] rev 26310
obsstore: fast path to check if obsstore is empty
Sun, 13 Sep 2015 17:52:37 +0900 obsstore: delay loading markers from obsstore file
Yuya Nishihara <yuya@tcha.org> [Sun, 13 Sep 2015 17:52:37 +0900] rev 26309
obsstore: delay loading markers from obsstore file This will allow us to use cached revisions without parsing obsstore. Because _version isn't determined at __init__, the debugobsconvert command no longer works correctly. I'll fix it by a separate patch for the evolve extension.
Sun, 13 Sep 2015 17:47:18 +0900 obsstore: initialize _all markers without using _addmarkers()
Yuya Nishihara <yuya@tcha.org> [Sun, 13 Sep 2015 17:47:18 +0900] rev 26308
obsstore: initialize _all markers without using _addmarkers() The next patch will make _all variable propertycached to avoid costly parsing of obsstore. This means we can't call _addmarkers() to initialize _all. Because all cached markers depend on _all, it isn't necessary to update these caches when _all is initially loaded.
Wed, 23 Sep 2015 00:41:07 -0700 revset: avoid implicit None testing in revset
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 23 Sep 2015 00:41:07 -0700] rev 26307
revset: avoid implicit None testing in revset Implicit None testing is a very good way to get in trouble. We explicitly test for None.
Sun, 20 Sep 2015 16:53:42 -0700 revset: speed up existence checks for ordered filtered sets
Durham Goode <durham@fb.com> [Sun, 20 Sep 2015 16:53:42 -0700] rev 26306
revset: speed up existence checks for ordered filtered sets Previously, calling 'if foo:' on a ordered filtered set would start iterating in whatever the current direction was and return if a value was available. If the current direction was ascending, but the set had a fastdesc available, this meant we did a lot more work than necessary. If this was applied without my previous max/min fixes, it would improve max() performance (this was my first attempt at fixing the issue). Since those previous fixes went in though, this doesn't have a visible benefit in the benchmarks, but it does seem clearly better than it was before so I think it should still go in.
Sun, 20 Sep 2015 19:27:53 -0700 revset: remove existence check from min() and max()
Durham Goode <durham@fb.com> [Sun, 20 Sep 2015 19:27:53 -0700] rev 26305
revset: remove existence check from min() and max() min() and max() would first do an existence check. Unfortunately existence checks can be slow in certain situations (like if the smartset is a list, and quickly iterable in both ascending and descending directions, then doing an existence check will start from the bottom, even if you want to check the max()). The fix is to not do the check, and just handle the error if it happens. In a large repo, this speeds up: hg log -r 'max(parents(. + .^) - (. + .^) & ::master)' from 3.5s to 0.85s. That revset is contrived and just for testing. In our real case we used 'bundle()' in place of '. + .^' Interesting perf numbers for the revset benchmarks: max(draft() and ::tip) => 0.027s to 0.0005s max(author(lmoscovicz)) => 2.48s to 0.57s min doesn't show any perf changes, but changing it as well will prevent a perf regression in my next patch. Result from revset benchmark revset #0: draft() and ::tip min max 0) 0.001971 0.001991 1) 0.001965 0.000428 21% revset #1: ::tip and draft() min max 0) 0.002017 0.001912 1) 0.001896 94% 0.000421 22% revset #2: author(lmoscovicz) min max 0) 1.049033 1.358913 1) 1.042508 0.319824 23% revset #3: author(lmoscovicz) or author(mpm) min max 0) 1.042512 1.367432 1) 1.019750 0.327750 23% revset #4: author(mpm) or author(lmoscovicz) min max 0) 1.050135 0.324924 1) 1.070698 0.319913 revset #5: roots((tip~100::) - (tip~100::tip)) min max 0) 0.000671 0.001018 1) 0.000605 90% 0.000946 92% revset #6: roots((0::) - (0::tip)) min max 0) 0.149714 0.152369 1) 0.098677 65% 0.100374 65% revset #7: (20000::) - (20000) min max 0) 0.051019 0.042747 1) 0.035586 69% 0.016267 38%
Fri, 18 Sep 2015 17:23:10 -0700 update: move default destination into a revset
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 18 Sep 2015 17:23:10 -0700] rev 26304
update: move default destination into a revset This is another step toward having "default" destination more clear and unified. Not all the logic is there because some bookmark related computation happened elsewhere. It will be moved later. The function is private because as for the other ones, cleanup is needed before we can proceed.
Thu, 17 Sep 2015 14:03:15 -0700 merge: move default destination computation in a revset
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Sep 2015 14:03:15 -0700] rev 26303
merge: move default destination computation in a revset This is another step toward having "default" destination more clear and unified.
Thu, 17 Sep 2015 12:44:52 -0700 mergecmd: simplify conditional
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Sep 2015 12:44:52 -0700] rev 26302
mergecmd: simplify conditional The previous if tested the same thing with 'if repo._activebookmark'. We make the if/else logic clearer before a bigger refactoring.
Thu, 17 Sep 2015 10:59:52 -0700 rebase: move destination computation in a revset
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Sep 2015 10:59:52 -0700] rev 26301
rebase: move destination computation in a revset This is the first step toward making the "default destination" logic more clear and unified. The revset is private because I'm happy to delay the bikeshedding until after the clean up happened.
Tue, 22 Sep 2015 14:47:18 -0400 debian: include bash completions in mercurial-common
Augie Fackler <augie@google.com> [Tue, 22 Sep 2015 14:47:18 -0400] rev 26300
debian: include bash completions in mercurial-common
Tue, 22 Sep 2015 14:32:17 -0400 debian: install hgk as part of mercurial-common (issue4829)
Augie Fackler <augie@google.com> [Tue, 22 Sep 2015 14:32:17 -0400] rev 26299
debian: install hgk as part of mercurial-common (issue4829) Leaving the hgk binary in /usr/bin causes some lintian warnings, and downstream packages poke it in /usr/share/mercurial, so we'll just stash it in there. Rather than patch hgk.py as part of the Mercurial install, just drop a config file in /etc/mercurial/hgrc.d that points to the installed hgk.
Tue, 22 Sep 2015 14:14:05 -0400 debian: install config files as part of mercurial-common
Augie Fackler <augie@google.com> [Tue, 22 Sep 2015 14:14:05 -0400] rev 26298
debian: install config files as part of mercurial-common Future patches will start putting config files in /etc/mercurial/, this just installs them.
Tue, 22 Sep 2015 14:31:17 -0400 debian: configuration so that cacerts is properly loaded
Augie Fackler <augie@google.com> [Tue, 22 Sep 2015 14:31:17 -0400] rev 26297
debian: configuration so that cacerts is properly loaded This will be included in the mercurial-common package in a followup patch.
Tue, 22 Sep 2015 14:13:07 -0400 debian: install hg-ssh to /usr/bin just like downstream
Augie Fackler <augie@google.com> [Tue, 22 Sep 2015 14:13:07 -0400] rev 26296
debian: install hg-ssh to /usr/bin just like downstream
Sun, 20 Sep 2015 20:13:27 +0900 highlight: remove temporary hack to overwrite repo.getcwd
Yuya Nishihara <yuya@tcha.org> [Sun, 20 Sep 2015 20:13:27 +0900] rev 26295
highlight: remove temporary hack to overwrite repo.getcwd Now hgweb does it globally.
Sun, 20 Sep 2015 20:11:31 +0900 hgweb: overwrite cwd to resolve file patterns relative to repo (issue4568)
Yuya Nishihara <yuya@tcha.org> [Sun, 20 Sep 2015 20:11:31 +0900] rev 26294
hgweb: overwrite cwd to resolve file patterns relative to repo (issue4568) It's useless to handle file patterns as relative to the cwd of the server process. The only sensible way in hgweb is to resolve paths relative to the repository root. It seems dirstate.getcwd() isn't used to get a real file path, so this patch won't cause problem.
Sun, 20 Sep 2015 20:08:22 +0900 dirstate: state that getcwd() shouldn't be used to get real file path
Yuya Nishihara <yuya@tcha.org> [Sun, 20 Sep 2015 20:08:22 +0900] rev 26293
dirstate: state that getcwd() shouldn't be used to get real file path hgweb will force it to be '' so that file patterns can be resolved relative to the repository root. I want to clarify that is correct.
Wed, 16 Sep 2015 12:36:21 -0700 merge: move merge step to the end
Siddharth Agarwal <sid0@fb.com> [Wed, 16 Sep 2015 12:36:21 -0700] rev 26292
merge: move merge step to the end Resolving other conflicts before merge ones is better because the state before the merge is as consistent as possible. It will also help with future work involving automatic resolution of merge conflicts with an external merge driver. There are no ordering issues here because it is easy to verify that the same file is never in both the dg/dm and the m sets.
Wed, 16 Sep 2015 19:52:06 -0700 lock: factor out lock testing into a separate function
Siddharth Agarwal <sid0@fb.com> [Wed, 16 Sep 2015 19:52:06 -0700] rev 26291
lock: factor out lock testing into a separate function This is going to be needed for upcoming work with lock inheritance.
Wed, 16 Sep 2015 19:26:59 -0700 lock: factor code to read lock into a separate function
Siddharth Agarwal <sid0@fb.com> [Wed, 16 Sep 2015 19:26:59 -0700] rev 26290
lock: factor code to read lock into a separate function This is going to be needed for upcoming work with lock inheritance.
Thu, 17 Sep 2015 15:38:00 -0700 tests: add unit tests for locking code
Siddharth Agarwal <sid0@fb.com> [Thu, 17 Sep 2015 15:38:00 -0700] rev 26289
tests: add unit tests for locking code We're going to make significant changes to lock behavior soon.
Tue, 22 Sep 2015 02:09:10 +0800 gitweb: port code selection without line numbers from paper
Anton Shestakov <av6@dwimlabs.net> [Tue, 22 Sep 2015 02:09:10 +0800] rev 26288
gitweb: port code selection without line numbers from paper This is adapted from f2e4fdb3dd27 and e92d4b8530cb. It also fixes issue4790 in gitweb; tab characters now have meaningful width on the modified pages (file view, file diff, changeset).
Sun, 13 Sep 2015 22:34:58 +0900 obsolete: remove unused _knownrevs function
Yuya Nishihara <yuya@tcha.org> [Sun, 13 Sep 2015 22:34:58 +0900] rev 26287
obsolete: remove unused _knownrevs function The call site was removed at cd62532c62a1.
(0) -10000 -3000 -1000 -120 +120 +1000 +3000 +10000 tip