Tue, 23 Dec 2014 14:56:30 -0800 trydiff: extract 'date2' variable like existing 'date1'
Martin von Zweigbergk <martinvonz@google.com> [Tue, 23 Dec 2014 14:56:30 -0800] rev 23662
trydiff: extract 'date2' variable like existing 'date1' Note that there is a comment saying "ctx2 date may be dynamic". The comment was introduced in dccb83241dd0 (patch: use contexts for diff, 2006-12-25), but it seems like it stopped being dynamic in that very changeset -- before that changeset, the date seems to have been the file's mtime, but after the changeset, it seems to be the changeset's timestamp (current time for workingctx). Since no one seems to have missed the "dynamicness", let's simplify and extract a date2 for symmetry with date1.
Tue, 23 Dec 2014 10:41:45 -0800 trydiff: use sets, not lists, for containment checks
Martin von Zweigbergk <martinvonz@google.com> [Tue, 23 Dec 2014 10:41:45 -0800] rev 23661
trydiff: use sets, not lists, for containment checks This only has a noticeable effect on diffs touching A LOT of files. For example, it takes hg diff -r FIREFOX_AURORA_30_BASE -r FIREFOX_AURORA_35_BASE from 1m55.465s to 1m32.354s. That diff has over 50k files.
Wed, 24 Dec 2014 13:33:01 -0600 largefiles: fix unused import
Matt Mackall <mpm@selenic.com> [Wed, 24 Dec 2014 13:33:01 -0600] rev 23660
largefiles: fix unused import Caught by pyflakes.
Sun, 07 Dec 2014 01:32:30 -0500 largefiles: look at unfiltered().lfstatus to allow status() to be filtered
Matt Harbison <matt_harbison@yahoo.com> [Sun, 07 Dec 2014 01:32:30 -0500] rev 23659
largefiles: look at unfiltered().lfstatus to allow status() to be filtered The comment about status being buggy with a repo proxy seems to be that status wasn't being redirected to testing the largefiles themselves- lfstatus was always False, and so the original status method was being called instead of doing the largefiles processing. This is because when the various largefile command overrides call 'repo.lfstatus = True', __setattr__() in repoview is in turn setting the value on the unfiltered repo, and the value in the filtered repo remains False. Explicitly looking at the attribute on the unfiltered repo keeps all views in sync.
Fri, 28 Nov 2014 14:21:02 -0500 largefiles: eliminate a duplicate message when removing files in verbose mode
Matt Harbison <matt_harbison@yahoo.com> [Fri, 28 Nov 2014 14:21:02 -0500] rev 23658
largefiles: eliminate a duplicate message when removing files in verbose mode There is no --after for addremove, so the printing for addremove can be hoisted out of the 'not after' check. The difference between the two remove messages reflects the existing difference between core remove and core addremove styles for printing the file. There are still some pre-existing issues here. Core addremove only prints on inexact matches or when verbose. But since the largefiles that are being removed are passed to removelargefiles() as a pattern list, there is never an inexact match, which would keep the largefiles from being printed at all unless verbose is specified. Therefore, the output is a little more aggressive than core. The addremove print style here is also inconsistent with core- it should use matcher.uipath(f) instead of f. These can be fixed once a matcher is passed in.
Wed, 17 Dec 2014 21:51:09 -0500 largefiles: ensure that the standin files are available in getlfilestoupload()
Matt Harbison <matt_harbison@yahoo.com> [Wed, 17 Dec 2014 21:51:09 -0500] rev 23657
largefiles: ensure that the standin files are available in getlfilestoupload() The function only adds the hash content of the file to the set to upload if the file in the ctx is a standin. It is called by overrides.summaryremotehook(), which is called in the summary method. The largefiles extension switches 'lfstatus' on in summary, so the standins shouldn't be visible when obtaining a context there. The reason this wasn't noticed before is that the 'lfstatus' attribute is only being set on the unfiltered repo because of how repoview delegates attribute assignment. Therefore any filtered view will return a context containing standins, whether or not 'lfstatus' was set in the various overrides methods. That will be fixed in the next patch. But without this change, the next patch would have test failures for 'summary --large' stating there are no files to upload.
Thu, 18 Dec 2014 09:22:09 -0800 merge: move checking of unknown files out of manifestmerge()
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 Dec 2014 09:22:09 -0800] rev 23656
merge: move checking of unknown files out of manifestmerge() This moves most reading of filelogs out of manifestmerge, making it easy for a narrow clone extension to filter out or translate unwanted actions before any filelogs are read. The only call left is inside of copies.mergecopies(), which can be overridden separately at a lower level.
Sat, 13 Dec 2014 23:52:22 -0800 merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com> [Sat, 13 Dec 2014 23:52:22 -0800] rev 23655
merge: extract method for checking for conflicting untracked file Now that the functionality is collected in one place, let's extract it to a method.
Mon, 15 Dec 2014 16:45:19 -0800 merge: create 'cm' action for 'get or merge' case
Martin von Zweigbergk <martinvonz@google.com> [Mon, 15 Dec 2014 16:45:19 -0800] rev 23654
merge: create 'cm' action for 'get or merge' case We still have one case of a call to _checkunknownfile() in manifestmerge(): when force=True and branchmerge=True and the remote side has a file that the local side doesn't. This combination of arguments is used by 'hg merge --force', but also by rebase and unshelve. In this scenario, we try to create the file from the contents from the remote, but if there is already a local untracked file in place, we merge it instead.
Fri, 12 Dec 2014 23:18:36 -0800 merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com> [Fri, 12 Dec 2014 23:18:36 -0800] rev 23653
merge: don't overwrite untracked file at directory rename target When a directory was renamed and a new untracked file was added in the new directory and the remote directory added a file by the same name in the old directory, the local untracked file gets overwritten, as demonstrated by the broken test case in test-rename-dir-merge. Fix by checking for unknown files for 'dg' actions too. Since _checkunknownfile() currently expects the same filename in both contexts, we need to add a new parameter for the remote filename to it.
Tue, 18 Nov 2014 20:29:25 -0800 merge: remove constant tuple element from 'aborts'
Martin von Zweigbergk <martinvonz@google.com> [Tue, 18 Nov 2014 20:29:25 -0800] rev 23652
merge: remove constant tuple element from 'aborts' The second element of the tuples in the 'aborts' list is always 'ud', so let's remove it.
Wed, 19 Nov 2014 11:51:31 -0800 merge: collect checking for unknown files at end of manifestmerge()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 19 Nov 2014 11:51:31 -0800] rev 23651
merge: collect checking for unknown files at end of manifestmerge() The 'c' and 'dc' actions include creating a file on disk and we need to check that no conflicting file exists unless force=True. Move two of the calls to _checkunknownfile() to a single place at the end of manifestmerge(). This removes some of the reading of filelogs from the heart of manifestmerge() and collects it in one place close to where its output (entries in the 'aborts' list) is used. Note that this removes the unnecessary call to _checkunknownfile() when force=True in one of the code paths.
Wed, 19 Nov 2014 11:48:30 -0800 merge: introduce 'c' action like 'g', but with additional safety
Martin von Zweigbergk <martinvonz@google.com> [Wed, 19 Nov 2014 11:48:30 -0800] rev 23650
merge: introduce 'c' action like 'g', but with additional safety _checkunknownfile() reads the filelog of the remote side's file. For narrow clones, the filelog will not exist for all files and we need a way to avoid reading them. While it would be easier for the narrow extension to just override _checkunknownfile() and make it ignore files outside the narrow clone, it seems cleaner to have manifestmerge() not care about filelogs (considering its name). In order to move the calls to _checkunknownfile() out, we need to be able to tell in which cases we should check for unknown files. Let's start by introducing a new action distinct from 'g' for this purpose. Specifically, the new action will be just like 'g' except that it will check that for conflicting unknown files first. For now, just add the new action type and convert it to 'g'.
Wed, 19 Nov 2014 11:44:00 -0800 merge: structure 'remote created' code to match table
Martin von Zweigbergk <martinvonz@google.com> [Wed, 19 Nov 2014 11:44:00 -0800] rev 23649
merge: structure 'remote created' code to match table This does duplicate the call to _checkunknownfile(), but it will simplify future patches.
Mon, 22 Dec 2014 15:48:39 -0800 pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 22 Dec 2014 15:48:39 -0800] rev 23648
pushkey: run hook after the lock release The pushkey operation used to be in its own wireprotocol command and (in practice) always be lock free when running the hook. With bundle2, it happen in a greater scheme and a hook running locking command would get stuck. We now run such hooks after the lock release as similar hook do. Bundle2 test are altered to ensure we are lockfree at hook running time.
Fri, 12 Dec 2014 15:31:28 -0800 setup: use changes since latest tag instead of just distance
Siddharth Agarwal <sid0@fb.com> [Fri, 12 Dec 2014 15:31:28 -0800] rev 23647
setup: use changes since latest tag instead of just distance For a Mercurial built on the merge from stable into default right after 3.2.2 was released -- 19ebd2f88fc7 -- the version number produced was "3.2.2+4". This is potentially misleading, since in reality the built Mercurial includes many more changes compared to 3.2.2. Change the versioning scheme so that we take into consideration all the changes present in the current revision that aren't present in the latest tag. For 19ebd2f88fc7 the new versioning scheme results in a version number of "3.2.2+256". This gives users a much better idea of how many changes have actually happened since the latest release. Since changessincelatesttag is always greater than or equal to the latesttagdistance, this will produce version numbers that are always greater than or equal to the old scheme. Thus there's minimal compatibility risk.
Fri, 12 Dec 2014 15:29:39 -0800 setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com> [Fri, 12 Dec 2014 15:29:39 -0800] rev 23646
setup: use changessincelatesttag from archive if present changessincelatesttag gives one a better idea of how much the code has changed since. Since changessincelatesttag is always greater than or equal to the latesttagdistance (see previous patch for why), this will always produce version numbers greater than or equal to the previous scheme.
Fri, 12 Dec 2014 15:27:13 -0800 archive: store number of changes since latest tag as well
Siddharth Agarwal <sid0@fb.com> [Fri, 12 Dec 2014 15:27:13 -0800] rev 23645
archive: store number of changes since latest tag as well This is different from latesttagdistance in that while latesttagdistance is defined to be the length of the longest path to the latest tag, changessincelatesttag is the number of changes contained in @ that aren't contained in the latest tag. So, if 't' is the latest tag in the repository below: t | v --o--o----o \ \ ..o..o..@ then latesttagdistance is 2, but changessincelatesttag is 4. Note that changessincelatesttag is always greater than or equal to the latesttagdistance -- that's because changessincelatesttag counts all the changes in the longest path since the latest tag, and possibly others. This is an important fact that we'll take advantage of in upcoming patches.
Mon, 22 Dec 2014 17:26:21 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 22 Dec 2014 17:26:21 -0600] rev 23644
merge with stable
Mon, 22 Dec 2014 17:27:31 -0500 demandimport: blacklist distutils.msvc9compiler (issue4475) stable
Augie Fackler <raf@durin42.com> [Mon, 22 Dec 2014 17:27:31 -0500] rev 23643
demandimport: blacklist distutils.msvc9compiler (issue4475) This module depends on _winreg, which is windows-only. Recent versions of setuptools load distutils.msvc9compiler and expect it to ImportError immediately when on non-Windows platforms, so we need to let them do that. This breaks in an especially mystifying way, because setuptools uses vars() on the imported module. We then throw an exception, which vars doesn't pick up on well. For example: In [3]: class wat(object): ...: @property ...: def __dict__(self): ...: assert False ...: In [4]: vars(wat()) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-4-2781ada5ffe6> in <module>() ----> 1 vars(wat()) TypeError: vars() argument must have __dict__ attribute Which is similar to the problem we run into.
Thu, 11 Dec 2014 22:51:29 -0800 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com> [Thu, 11 Dec 2014 22:51:29 -0800] rev 23642
largefiles: don't duplicate 'actions' into 'actionbyfile'
Thu, 11 Dec 2014 22:07:41 -0800 merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com> [Thu, 11 Dec 2014 22:07:41 -0800] rev 23641
merge: make calculateupdates() return file->action dict This simplifies largefiles' overridecalculateupdates(), which no longer has to do the conversion it started doing in 38e55e55ae4d (largefiles: rewrite merge code using dictionary with entry per file, 2014-12-09). To keep this patch small, we'll leave the name 'actionbyfile' in overrides.py. It will be renamed in the next patch.
Thu, 11 Dec 2014 21:58:49 -0800 merge: let _forgetremoved() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com> [Thu, 11 Dec 2014 21:58:49 -0800] rev 23640
merge: let _forgetremoved() work on the file->action dict By moving the conversion from the file->action dict after _forgetremoved(), we make that method shorter by removing the need for the confusing 'xactions' variable.
Thu, 11 Dec 2014 21:06:16 -0800 merge: let _resolvetrivial() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com> [Thu, 11 Dec 2014 21:06:16 -0800] rev 23639
merge: let _resolvetrivial() work on the file->action dict By moving the conversion from the file->action dict after _resolvetrivial(), we greatly simplify and clarify that method.
Thu, 11 Dec 2014 20:56:53 -0800 merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com> [Thu, 11 Dec 2014 20:56:53 -0800] rev 23638
merge: let bid merge work on the file->action dict By moving the conversion from the file->action dict after the bid merge code, bid merge can be simplified a little. A few tests are affected by this change. Where we used to iterate over the actions first in order of the action type ('g', 'r', etc.) [1], we now iterate in order of filename. This difference affects the order of debug log statements. [1] And then in the non-deterministic order of files in the manifest dictionary (the order returned from manifest.diff()).
Mon, 08 Dec 2014 13:24:10 -0800 merge: write manifestmerge() using dictionary with entry per file
Martin von Zweigbergk <martinvonz@google.com> [Mon, 08 Dec 2014 13:24:10 -0800] rev 23637
merge: write manifestmerge() using dictionary with entry per file In the same vein as 38e55e55ae4d (largefiles: rewrite merge code using dictionary with entry per file, 2014-12-09), rewrite manifestmerge() itself as dictionary with the filename as key. This will let us simplify some of the other code in merge.py and eventually drop the conversion in the largefiles code. No difference in speed could be detected (well within the noise level when run in Mozilla repo).
Wed, 17 Dec 2014 12:21:07 -0800 repoview: backout ced3ecfc2e57
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 17 Dec 2014 12:21:07 -0800] rev 23636
repoview: backout ced3ecfc2e57 Monkey patching repoview does not really work and making it really work will be really hard. So we better have it broken without complexity than broken with extra complexity.
Wed, 17 Dec 2014 12:19:33 -0800 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 17 Dec 2014 12:19:33 -0800] rev 23635
largefile: explain why no monkey patching on a repoview The comment requested for investigations, here they are.
Wed, 17 Dec 2014 12:10:16 -0800 largefile: backout ca54fb3d71ce
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 17 Dec 2014 12:10:16 -0800] rev 23634
largefile: backout ca54fb3d71ce The hack for method monkey patching on repoview has been ruled out as fragile, so we are rolling it back. We'll expand the explanation in the next changeset.
Thu, 18 Dec 2014 12:33:17 -0800 incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com> [Thu, 18 Dec 2014 12:33:17 -0800] rev 23633
incoming: handle phases the same as pull Now that bundlerepo can move phases safely, 'hg incoming' can share its phase handling code with pull to better reflect what would actually show up.
(0) -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip