Fri, 26 Sep 2014 13:55:53 -0700 clone: copy `.hg/bookmarks` during copy clone
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 26 Sep 2014 13:55:53 -0700] rev 22646
clone: copy `.hg/bookmarks` during copy clone Now that the standard pull function includes bookmarks, we need to ensure that a copy clone also copies the bookmarks. This will let us drop the manual bookmark pulling done independently during a clone.
Fri, 26 Sep 2014 17:44:00 -0700 pull: move bookmark movements inside the `exchange.pull`
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 26 Sep 2014 17:44:00 -0700] rev 22645
pull: move bookmark movements inside the `exchange.pull` There is no reason for bookmarks to get a special treatment. As a first step we move the code as is in the `exchange.pull` function. Integration with the rest of the flow will come later. Adding bookmarks to pull means that most clone paths are now pulling bookmarks through pull. We ensure that bookmark-update messages are properly suppressed in that case. In test-pull-http.t the 'requesting all changes' message disappear because we now get the authentication error on the `listkeys`command before such message is printed.
Thu, 02 Oct 2014 12:16:07 -0500 bookmarks: allow `updatefromremote` to be quiet
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 02 Oct 2014 12:16:07 -0500] rev 22644
bookmarks: allow `updatefromremote` to be quiet This will be useful to use the function during clone (clone is not printing any bookmark data right now)
Thu, 02 Oct 2014 12:39:37 -0500 util: fix sorteddict.pop
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 02 Oct 2014 12:39:37 -0500] rev 22643
util: fix sorteddict.pop When using `.pop` on such object the list was not cleared of the popped key, leading to crash.
Fri, 26 Sep 2014 12:51:55 -0700 localrepo: pass arbitrary kwargs from `repo.pull` to `exchange.pull`
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 26 Sep 2014 12:51:55 -0700] rev 22642
localrepo: pass arbitrary kwargs from `repo.pull` to `exchange.pull` We'll add bookmark-related arguments to `repo.pull` so we need to widen the signature of `repo.pull`. We should probably kill `repo.pull` now that `repo.push` is dead but this is outside the scope of this series.
Fri, 26 Sep 2014 10:59:29 -0700 pull: use `other.url()` as the source of a bookmark pull
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 26 Sep 2014 10:59:29 -0700] rev 22641
pull: use `other.url()` as the source of a bookmark pull We want to move the bookmarks movement into `exchange.pull`, for this purpose we need to stop relying on variables from `command.pull`.
Tue, 30 Sep 2014 17:13:54 -0700 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com> [Tue, 30 Sep 2014 17:13:54 -0700] rev 22640
setup: set mode 644 or 755 on installed files
Thu, 02 Oct 2014 21:58:10 +0900 branches: reduce nesting in for loop
Yuya Nishihara <yuya@tcha.org> [Thu, 02 Oct 2014 21:58:10 +0900] rev 22639
branches: reduce nesting in for loop
Sun, 28 Sep 2014 16:57:47 +0200 i18n: use datapath for i18n like for templates and help
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Sep 2014 16:57:47 +0200] rev 22638
i18n: use datapath for i18n like for templates and help To avoid circular module dependencies we initialize i18n from util when datapath is found.
Sun, 28 Sep 2014 16:57:47 +0200 help: don't search randomly for help data - trust util.datapath
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Sep 2014 16:57:47 +0200] rev 22637
help: don't search randomly for help data - trust util.datapath The search was introduced in c904e76e3834 without a convincing explanation why it should be necessary ... except for consistency with templater handling. Now, just keep it simple.
Sun, 28 Sep 2014 16:57:37 +0200 templater: don't search randomly for templates - trust util.datapath
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Sep 2014 16:57:37 +0200] rev 22636
templater: don't search randomly for templates - trust util.datapath The search was introduced in 2653740d8118. It might have been necessary back then when using __file__ directly and frozen-ness wasn't considered. Now we should know exactly where the templates can be found.
Sun, 28 Sep 2014 16:57:37 +0200 templater: inline global 'path' list in templatepaths
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Sep 2014 16:57:37 +0200] rev 22635
templater: inline global 'path' list in templatepaths
Sun, 28 Sep 2014 16:57:37 +0200 templater: introduce templatepaths for getting paths searched for templates
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Sep 2014 16:57:37 +0200] rev 22634
templater: introduce templatepaths for getting paths searched for templates Avoid function with different return types depending on parameters.
Sun, 28 Sep 2014 16:57:06 +0200 util: introduce datapath for getting the location of supporting data files
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Sep 2014 16:57:06 +0200] rev 22633
util: introduce datapath for getting the location of supporting data files templates, help and locale data is normally stored as sub folders in the directory containing the source of the mercurial module. In a frozen build they live as sub folders next to 'hg.exe' and 'library.zip'. These different kind of data were handled in different ways. Unify that by introducing util.datapath. The value is computed from the environment and is always used, so we just calculate the value on module load.
Sun, 28 Sep 2014 16:57:06 +0200 util: move _hgexecutable a few lines, closer to where it is used
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Sep 2014 16:57:06 +0200] rev 22632
util: move _hgexecutable a few lines, closer to where it is used
Sun, 28 Sep 2014 13:27:40 +0200 hgk: define bookmark colour explicitly, as Tk 8.6 has changed their meaning
Andrew Shadura <andrew@shadura.me> [Sun, 28 Sep 2014 13:27:40 +0200] rev 22631
hgk: define bookmark colour explicitly, as Tk 8.6 has changed their meaning
Tue, 30 Sep 2014 14:32:49 -0700 largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com> [Tue, 30 Sep 2014 14:32:49 -0700] rev 22630
largefiles: remove 'forget' list that's always empty
Thu, 02 Oct 2014 16:43:50 -0500 bookmarks: fix divergent bookmark path normalization
Matt Mackall <mpm@selenic.com> [Thu, 02 Oct 2014 16:43:50 -0500] rev 22629
bookmarks: fix divergent bookmark path normalization
Thu, 02 Oct 2014 11:35:20 -0500 exchange: remove a broken i18n abuse
Matt Mackall <mpm@selenic.com> [Thu, 02 Oct 2014 11:35:20 -0500] rev 22628
exchange: remove a broken i18n abuse
Fri, 26 Sep 2014 11:31:15 -0700 bookmark: make the search for divergent names more robust
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 26 Sep 2014 11:31:15 -0700] rev 22627
bookmark: make the search for divergent names more robust We translate the "url we update from" and "the url in the config" into their canonical representation. This is useful for urls that have multiple equivalent forms: /foo/bar/ == file:/foo/bar/ == file:///foo/bar eg: hg pull --config path.bar=/foo/bar/ file:/foo/bar
Thu, 25 Sep 2014 17:53:27 -0700 pull: gather all bookmark-pulling code together
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 17:53:27 -0700] rev 22626
pull: gather all bookmark-pulling code together Pulling bookmarks is done in two rounds. First we do a simple update, then we use the content of the `bookmark` argument to possibly overwrite some bookmark with their remote location. The second step was not done right after the first one for some obscure reason. We now perform them one after the other.
Thu, 25 Sep 2014 02:53:29 -0700 push: perform bookmark export in the push function
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 02:53:29 -0700] rev 22625
push: perform bookmark export in the push function This part is responsible for adding new bookmarks on the remote. Before that, it was done on its own in `commands.push`. The export is still not integrated with the rest of the push process, but at least it now dwells in the right function.
Thu, 25 Sep 2014 00:57:36 -0700 push: add `pushoperation.bkresult`
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 00:57:36 -0700] rev 22624
push: add `pushoperation.bkresult` This attribute will be used to carry the result of the bookmark push (when the `push` function will effectively be doing any bookmarks pushes)
Thu, 25 Sep 2014 01:49:20 -0700 push: pass list of bookmark to `exchange.push`
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 01:49:20 -0700] rev 22623
push: pass list of bookmark to `exchange.push` Currently stored but not unused. This parameter will control bookmarks explicitly pushed (added to the server if missing).
Thu, 25 Sep 2014 15:26:09 -0700 exchange: import bookmarks as bookmod
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 15:26:09 -0700] rev 22622
exchange: import bookmarks as bookmod Using the original names makes it difficult to use `bookmarks` as a variable name.
Thu, 25 Sep 2014 02:53:49 -0700 push: sanitize handling of bookmark push return value
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 02:53:49 -0700] rev 22621
push: sanitize handling of bookmark push return value Mixing return and assignment does not make sense, let's unify this.
Thu, 25 Sep 2014 01:43:24 -0700 locarepo: remove the `push` method (API)
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 01:43:24 -0700] rev 22620
locarepo: remove the `push` method (API) All the logic of this function is in the exchange.push function for some time. We just stop calling `localrepo.push` in `command.push` to have access to more information. Leaving `localrepo.push` in place will let third-party extensions wrap it but it would never be called by `hg push` making the wrapping useless. Therefore, the method is removed so that third-party code fail noisily and get properly upgraded.
Thu, 25 Sep 2014 01:42:49 -0700 push: `exchange.push` instead of `localrepo.push`
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 01:42:49 -0700] rev 22619
push: `exchange.push` instead of `localrepo.push` The latter is going away.
Thu, 25 Sep 2014 01:41:26 -0700 clone: use `exchange.push` instead of `localrepo.push`
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 01:41:26 -0700] rev 22618
clone: use `exchange.push` instead of `localrepo.push` The latter is going away.
Thu, 25 Sep 2014 01:39:39 -0700 push: use `exchange.push` in `commands.push`
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 01:39:39 -0700] rev 22617
push: use `exchange.push` in `commands.push` To gain access to all results from the push, we need to have access to the `pushoperation` object. We call `exchange.push` to do so. It is impossible to just change the `localrepo.push` signature because the change may be too subtle to be caught by external extension wrapping `localrepo.push`. This mean we'll have to kill `localrepo.push` because just using `exchange.push` in `commands.py` would silently disable all wrapping around `localrepo.push` by third-party extensions. So we'll remove it in a later changeset to get such extensions to fail noisily.
Thu, 25 Sep 2014 02:21:59 -0700 push: `exchange.push` now returns the `pushoperation` object
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 02:21:59 -0700] rev 22616
push: `exchange.push` now returns the `pushoperation` object Returning the pushop object gives access to more information (upcoming bookmark push result for example). `localrepo.push` currently extracts the `cgresult` for callers.
Thu, 25 Sep 2014 00:55:39 -0700 push: rename `pushop.ret` to `pushop.cgresult`
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 25 Sep 2014 00:55:39 -0700] rev 22615
push: rename `pushop.ret` to `pushop.cgresult` We are about to introduce more results-related attributes on pushop (for bookmarks) so we need a more distinctive name. We now use `cgresult` as `pulloperation` does.
Tue, 16 Sep 2014 15:57:51 -0700 obsolete: use version constants in the format mapping
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 16 Sep 2014 15:57:51 -0700] rev 22614
obsolete: use version constants in the format mapping
Tue, 16 Sep 2014 15:56:38 -0700 obsolete: use the `version` argument in encodemarkers
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 16 Sep 2014 15:56:38 -0700] rev 22613
obsolete: use the `version` argument in encodemarkers Recent scientific studies show that assigning a variable have no effect on a unrelated constant. We therefore use the variable where we intended to in the first place.
Fri, 12 Sep 2014 14:41:43 +0200 obsolete: gather all contents related to format version 0 in a single place
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 12 Sep 2014 14:41:43 +0200] rev 22612
obsolete: gather all contents related to format version 0 in a single place All contents includes documentation, constants, and functions, so we gather all of those things into a single location. The diff is confusing because it cannot understand what code is semantically moved around in this grand migration.
Sun, 31 Aug 2014 13:01:00 +0200 revert: properly back up added files with local modification
Pierre-Yves David <pierre-yves.david@fb.com> [Sun, 31 Aug 2014 13:01:00 +0200] rev 22611
revert: properly back up added files with local modification These files were previously not backed up because the backup mechanism was not smart enough. This leads to data lose for the user since uncommitted contents were discarded. We now properly move the modified version to <filename>.orig before deleting it. We have to use a small hack to do a different action if "--no-backup" is specified. This is needed because the backup process is actually a move (not a copy) so the file is already missing when we backup. The internet kitten is a bit disapointed about that, but such is life. This patch concludes the "lets refactor revert" phases. We can now open the "Lets find stupid bug with renames and merge" phases. I'm sure that now that the code is clearer we could do it in another simpler way, but I consider the current improvement good enough for now.
Sat, 30 Aug 2014 02:39:08 +0200 revert: track added files with local modifications
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 30 Aug 2014 02:39:08 +0200] rev 22610
revert: track added files with local modifications Those files need to be backed up but are currently not. We compute the set of them to be able to use a different backup strategy in the next changeset.
Sat, 30 Aug 2014 02:30:24 +0200 revert: distinguish between "check" and "backup" strategy
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 30 Aug 2014 02:30:24 +0200] rev 22609
revert: distinguish between "check" and "backup" strategy "check" behaves as backup did before. We check if the current file differs from destination and we create a backup if it does. This is used for untracked files that will be overwritten by formerly-deleted files. We have to do the manual check since no status output can provide the content comparison. "backup" is now doing unconditional backup. This can be used for files seen as modified compared to both the target and the working directory. In such a case, we know that the file differs from target without actually comparing any content. This new "backup" strategy will be especially useful in the case of files added between the target and the working directory -parent- with additional modifications in the working directory -itself-. In that case we know we need to back it up, but we cannot run the content check as the files does not exists in target.
Sat, 30 Aug 2014 02:28:27 +0200 revert: small refactoring in the way backup value are handled
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 30 Aug 2014 02:28:27 +0200] rev 22608
revert: small refactoring in the way backup value are handled The current backup value may have two different values: 1. Do not try to do backup 2. Do backup if applicable We are about to move to: 1. Do not try to do backup 2. Do backup if applicable 3. Do backup in all cases So we change the current values to make room for the new one.
Wed, 01 Oct 2014 15:05:09 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Wed, 01 Oct 2014 15:05:09 -0500] rev 22607
merge with stable
Wed, 01 Oct 2014 14:59:33 -0500 Added signature for changeset f768c888aaa6 stable
Matt Mackall <mpm@selenic.com> [Wed, 01 Oct 2014 14:59:33 -0500] rev 22606
Added signature for changeset f768c888aaa6
Wed, 01 Oct 2014 14:58:05 -0500 Added tag 3.1.2 for changeset f768c888aaa6 stable
Matt Mackall <mpm@selenic.com> [Wed, 01 Oct 2014 14:58:05 -0500] rev 22605
Added tag 3.1.2 for changeset f768c888aaa6
Wed, 01 Oct 2014 14:44:24 -0500 parsers: fix Py2.4 argument parsing issue
Matt Mackall <mpm@selenic.com> [Wed, 01 Oct 2014 14:44:24 -0500] rev 22604
parsers: fix Py2.4 argument parsing issue Since fa53d66b45a8, we were getting this strange message with Py2.4: TypeError: argument 1 must be impossible<bad format char>, not int ..because we were using the 'n' type specifier introduced in 2.5. It turns out that offset is actually a revision number index, which ought to be an int anyway. So we store it in an int, use the 'i' specifier, rely on Py_ParseTuple for range checking, and rename it to avoid type confusion.
Wed, 01 Oct 2014 12:35:18 -0500 merge with i18n stable 3.1.2
Matt Mackall <mpm@selenic.com> [Wed, 01 Oct 2014 12:35:18 -0500] rev 22603
merge with i18n
Tue, 30 Sep 2014 16:59:07 -0400 diff: document the nobinary option stable
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 30 Sep 2014 16:59:07 -0400] rev 22602
diff: document the nobinary option Since 3fbef7ac26f0, we have a diff.nobinary option. This is handy, but the only way I found out about it was by looking at the release notes for 3.1, which is not something I normally do.
Tue, 30 Sep 2014 13:43:30 -0300 i18n-pt_BR: minor fixes and rewording on histedit help text stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Tue, 30 Sep 2014 13:43:30 -0300] rev 22601
i18n-pt_BR: minor fixes and rewording on histedit help text
Tue, 30 Sep 2014 10:17:59 -0300 i18n-pt_BR: synchronized with c712238c4f9b stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Tue, 30 Sep 2014 10:17:59 -0300] rev 22600
i18n-pt_BR: synchronized with c712238c4f9b
Tue, 30 Sep 2014 10:13:25 -0300 merge with i18n stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Tue, 30 Sep 2014 10:13:25 -0300] rev 22599
merge with i18n
Mon, 22 Sep 2014 15:39:21 -0300 i18n-pt_BR: synchronized with 802dffd62de5 stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 22 Sep 2014 15:39:21 -0300] rev 22598
i18n-pt_BR: synchronized with 802dffd62de5
Sun, 14 Sep 2014 20:32:34 -0400 filelog: censored files compare against empty data, have 0 size
Mike Edgar <adgar@google.com> [Sun, 14 Sep 2014 20:32:34 -0400] rev 22597
filelog: censored files compare against empty data, have 0 size To support "status" operations against working directories that are the children of censored revisions, filelog must define "cmp" and "size" for censored content.
Wed, 03 Sep 2014 22:14:20 -0400 filelog: raise CensoredNodeError when hash checks fail with censor metadata
Mike Edgar <adgar@google.com> [Wed, 03 Sep 2014 22:14:20 -0400] rev 22596
filelog: raise CensoredNodeError when hash checks fail with censor metadata With this change, when a revlog revision hash does not match its content, and the content is empty with a special metadata key, the integrity failure is assumed to be intentionally caused to remove sensitive content from repository history. To allow different Mercurial functionality to handle this scenario differently a more specific exception is raised than "ordinary" hash failures. Alternatives to this approach include, but are not limited to: - Calling a hook when hashes mismatch to allow arbitrary tombstone validation. Cons: Irresponsibly easy to disable integrity checking altogether. - Returning empty revision data eagerly instead of raising, masking the error. Cons: Push/pull won't roundtrip the tombstone, so client repos are unusable. - Doing nothing differently at this layer. Callers must do their own detection of tombstoned data if they want to handle some hash checks and not others. - Impacts dozens of callsites, many of which don't have the revision data - Would probably be missing one or two callsites at any given time - Currently we throw a RevlogError, as do 12 other places in revlog.py. Callers would need to parse the exception message and/or ensure RevlogError is not thrown from any other part of their call tree.
Wed, 03 Sep 2014 15:59:03 -0400 error: add CensoredNodeError, will be thrown when content deliberately erased
Mike Edgar <adgar@google.com> [Wed, 03 Sep 2014 15:59:03 -0400] rev 22595
error: add CensoredNodeError, will be thrown when content deliberately erased This change introduces the error plus a corresponding catch in dispatch, to provide localized error messages. The verb "censor" is used in this commit and all following to refer to erasing the content of a revlog revision (filelog, for now) without recalculating node IDs, leaving that revision invalid. Further work must be done to safely share such revision data with compliant clients. I find the analogy to censorship straightforward; for less politically charged options, consider "erase", "excise", "expunge", or "blackhole".
Tue, 30 Sep 2014 16:01:19 -0700 files: cache repo.dirstate
Siddharth Agarwal <sid0@fb.com> [Tue, 30 Sep 2014 16:01:19 -0700] rev 22594
files: cache repo.dirstate For a large repo, 'hg files' goes from 2.27 seconds to 1.92.
Tue, 30 Sep 2014 15:21:35 -0700 files: only check for removed, not unknown or missing
Siddharth Agarwal <sid0@fb.com> [Tue, 30 Sep 2014 15:21:35 -0700] rev 22593
files: only check for removed, not unknown or missing ctx.matches() doesn't return unknown files, and repo.dirstate[f] never returns '!' for an answer.
Tue, 30 Sep 2014 14:39:58 -0700 files: use ctx.matches instead of ctx.walk
Siddharth Agarwal <sid0@fb.com> [Tue, 30 Sep 2014 14:39:58 -0700] rev 22592
files: use ctx.matches instead of ctx.walk ctx.matches() is an optimized form of ctx.walk() when we don't care about the state of files on disk. For a large repo, 'hg files > /dev/null' drops from 3.7 seconds to 2.3.
Tue, 30 Sep 2014 15:45:48 -0700 files: actually filter out removed files
Siddharth Agarwal <sid0@fb.com> [Tue, 30 Sep 2014 15:45:48 -0700] rev 22591
files: actually filter out removed files 'hg files' makes an attempt to filter out removed files, but that doesn't work because repo.dirstate[f] returns lowercase 'r', not uppercase.
(0) -10000 -3000 -1000 -300 -100 -56 +56 +100 +300 +1000 +3000 +10000 tip