Commit Graph
52 Commits
Author SHA1 Message Date
arthur.iakab 5ccb27be44 Backed out changeset 5f6139ef7c2c (bug 1515261) for causing Windows build bustages CLOSED TREE 2019-01-04 18:29:53 +02:00
Andrew Halberstadt dcfd060126 Bug 1515261 - [mozversioncontrol] Fix unicode env string on Windows, r=sheehan
Differential Revision: https://phabricator.services.mozilla.com/D15727
2019-01-04 15:31:56 +00:00
Andrew Halberstadt 0ee3e35612 Bug 1472177 - Run mozversioncontrol tests under python 3 r=gps
This also enables the py2 linter which will help maintain compatibility
with both 2 and 3.

Differential Revision: https://phabricator.services.mozilla.com/D1884
2018-07-24 21:21:46 +00:00
Gregory Szorc aca0c6ba55 Bug 1475649 - Always use --untracked-files; r=ahal
a35b188d0e44 inadvertently regressed behavior in the case where
the Git status.showUntrackedFiles config option was set and
we want to purge untracked files.

Differential Revision: https://phabricator.services.mozilla.com/D2141
2018-07-16 13:19:09 +00:00
Andrew Halberstadt aac1f94bb3 Bug 1475649 - [mozversioncontrol] Make vcs.working_directory_clean() ignore untracked files by default r=jgraham
The doc string for the "working_directory_clean" function states:
> By default, untracked and ignored files are not considered.

But the git implementation for this function used to run:
git status --porcelain

Which *does* consider untracked files by default. Instead, we need to run:
git status --porcelain --untracked-files=no

Differential Revision: https://phabricator.services.mozilla.com/D2134
2018-07-13 20:54:08 +00:00
Andrew Halberstadt f14303b175 Bug 1413922 - [tryselect] Merge vcs.py into mozversioncontrol r=gps
Differential Revision: https://phabricator.services.mozilla.com/D1808
2018-07-10 19:22:00 +00:00
Andrew Halberstadt 8794c5fb58 Bug 1413922 - [mozversioncontrol] Always use hglib.client if available and fall back to subprocesses if not, r=gps
Most HG commands use subprocesses, even if a context manager (and therefore an
hglib client) has been created. There are only two commands that make use of
the client, but they *only* work inside a context manager. I don't think
there are any technical reason these two commands *need* to use the context
manager.

This patch merges the HgRepository._run_in_client function with
HgRepository._run(). If a client exists, that will be used, otherwise a
subprocess will be used.

Differential Revision: https://phabricator.services.mozilla.com/D1809
2018-07-10 20:41:49 +00:00
Coroiu Cristina eed0be1805 Backed out 2 changesets (bug 1413922) for breaking Nightly L10n a=backout
Backed out changeset e7a1d749ff9a (bug 1413922)
Backed out changeset b3bead1f5729 (bug 1413922)
2018-07-10 03:11:28 +03:00
Andrew Halberstadt 7c0ca56b2a Bug 1413922 - [tryselect] Merge vcs.py into mozversioncontrol r=gps
Differential Revision: https://phabricator.services.mozilla.com/D1808
2018-07-07 00:32:11 +00:00
Andrew Halberstadt 7fdc5bfb32 Bug 1413922 - [mozversioncontrol] Always use hglib.client if available and fall back to subprocesses if not, r=gps
Most HG commands use subprocesses, even if a context manager (and therefore an
hglib client) has been created. There are only two commands that make use of
the client, but they *only* work inside a context manager. I don't think
there are any technical reason these two commands *need* to use the context
manager.

This patch merges the HgRepository._run_in_client function with
HgRepository._run(). If a client exists, that will be used, otherwise a
subprocess will be used.

Differential Revision: https://phabricator.services.mozilla.com/D1809
2018-06-26 00:13:58 +00:00
Andrew Halberstadt 66db90f18e Bug 1471620 - Skip python-tests locally that don't run with python 3 in CI r=davehunt
This will make sure that when running |mach python-test --python 3| locally,
we only run the tests that also run in CI with python 3 (and therefore pass
presumably).

MozReview-Commit-ID: 3OBr9yLSlSq
2018-06-27 11:10:02 -04:00
Dave Hunt eef6bca168 Bug 1388013 - Support running |mach python-test| against Python 3 using pipenv; r=ahal
This patch allows executing |mach python-test| against Python 3 by specifying the optional |--three| command line option. When this option is present, pipenv will be used to manage a virtual environment using Python 3 and attempt to run the tests. When it is not present, pipenv will not be used, and everything will work as it did before this patch.

My original plan was to use pipenv regardless of the target version of Python, however I encountered several issues running some of the tests against our Python packages. Once all tests have been patched to run against Python 3, then we should be able to use pipenv when running them against Python 2.

Note that this patch allows tests to run against Python 3, but there are plenty of issues preventing them from passing. With this patch in place we can start to add Python 3 support to our packages and have the tests running in CI to ensure we don't regress back to just supporting Python 2.

MozReview-Commit-ID: BuU5gZK83hL


IHG: changed taskcluster/ci/source-test/python.yml
2018-05-03 10:34:22 +01:00
Andreea Pavel baf70c19f5 Backed out 3 changesets (bug 1388013) for build bustages e.g. ../python/mozbuild/mozpack/test/test_files.py on a CLOSED TREE
Backed out changeset eea857170a41 (bug 1388013)
Backed out changeset c55bfefbd4e1 (bug 1388013)
Backed out changeset 3a163da2b21b (bug 1388013)
2018-05-31 11:48:19 +03:00
Dave Hunt d847c54788 Bug 1388013 - Support running |mach python-test| against Python 3 using pipenv; r=ahal
This patch allows executing |mach python-test| against Python 3 by specifying the optional |--three| command line option. When this option is present, pipenv will be used to manage a virtual environment using Python 3 and attempt to run the tests. When it is not present, pipenv will not be used, and everything will work as it did before this patch.

My original plan was to use pipenv regardless of the target version of Python, however I encountered several issues running some of the tests against our Python packages. Once all tests have been patched to run against Python 3, then we should be able to use pipenv when running them against Python 2.

Note that this patch allows tests to run against Python 3, but there are plenty of issues preventing them from passing. With this patch in place we can start to add Python 3 support to our packages and have the tests running in CI to ensure we don't regress back to just supporting Python 2.

MozReview-Commit-ID: BuU5gZK83hL


IHG: changed taskcluster/ci/source-test/python.yml
2018-05-03 10:34:22 +01:00
Andrew Halberstadt ea4da089aa Bug 1405588 - [mozversioncontrol] Use base_ref instead of upstream as default outgoing comparison on git, r=gps
Detecting the upstream repository isn't always possible. Using 'git merge-base'
seems to be a more reliable way of detecting outgoing files.


MozReview-Commit-ID: 3zOdTRIcggw
2017-11-01 12:57:03 -04:00
Andrew Halberstadt bb9ace07c8 Bug 1405588 - [mozversioncontrol] Add ability to get base revision, r=gps
In addition to help fix this bug, having the base revision will allow us
to download the most likely relevant artifacts from CI. For example, in
|mach try| we can search for a 'full-taskgraph.json' artifact from the
most relevant decision task, even if not updated to the latest central.

The ability to find the base revision will also be needed when merging
tools/tryselect/vcs.py into mozversioncontrol.

MozReview-Commit-ID: 2WRRs4AoXcK
2017-10-26 17:04:22 -04:00
Andrew Halberstadt 38330494a3 Bug 1401199 - [mozversioncontrol] Add property to get hash of HEAD revision, r=mshal
MozReview-Commit-ID: 9XWlLeGcPeQ
2017-09-29 11:10:59 -04:00
Andrew Halberstadt c12a2cb5ee Bug 1401309 - [mozlint] Remove vcs.py and use mozversioncontrol instead, r=gps
This also migrates the vcs.py test to mozversioncontrol and adds a new task for
it.

MozReview-Commit-ID: 9jTRkjNupVA
2017-09-25 16:30:27 -04:00
Andrew Halberstadt c7c63a9fb4 Bug 1401309 - [mozversioncontrol] Add an option to make failed subprocess commands non-fatal, r=gps
Sometimes commands return non-zero even though everything is ok. For example,
'hg outgoing' returns 1 if there are no outgoing files. This adds a way for
specific function calls not to abort if something goes wrong. Instead, stderr
will be printed (if any) and an empty string is returned.

MozReview-Commit-ID: E089djeHrmr
2017-09-25 16:30:13 -04:00
Andrew Halberstadt ebc0410d4e Bug 1401309 - [mozversioncontrol] Add ability to get outgoing files, r=gps
This adds 'get_outgoing_files'. First it automatically attempts to find the
upstream remote the current change is based on, then returns all files changed
in the local branch.

If an upstream remote can't be detected, it raises MissingUpstreamRepo

MozReview-Commit-ID: 9zSB9EdwVU8
2017-09-20 10:15:09 -04:00
Andrew Halberstadt 8f4d1e4d6e Bug 1401309 - [mozversioncontrol] Merge get_modified_files and get_added_files into a single function, r=gps
There's currently a function for getting added files (A) and modified files
(M). We'll also eventually need the ability to get deleted files (D) and any
combination of the above, e.g (AM). Rather than creating a new function for
each possible case, let's have a single function where you can pass in which
modifiers you are interested in. With this patch, if you want all modified and
added files, you can do:

get_changed_files('AM')

By default 'ADM' is used.

This also adds a 'mode' option for git. This allows consumers to return staged
files, unstaged files or both. The default ('unstaged') keeps the current
behaviour in tact.

MozReview-Commit-ID: 9IA1bxaJS80
2017-09-20 10:06:11 -04:00
Andrew Halberstadt 8d00bb6a0b Bug 1401309 - Add python/mozversioncontrol to flake8 linter, r=gps
MozReview-Commit-ID: KuyEYa3Mbgd
2017-09-20 10:02:26 -04:00
Gregory Szorc a1b9c92292 Bug 1397406 - Add Repository method to determine if working directory clean; r=dustin
This is generally useful functionality to have. A consume will be
introduced in an upcoming commit.

MozReview-Commit-ID: 4arTMfJSiEC
2017-09-06 12:15:12 -07:00
Gregory Szorc bd4027fdd5 Bug 1393242 - Use hglib for get_files_in_working_directory(); r=mshal
And convert consumers to context managers because hglib requires that.

MozReview-Commit-ID: Ckf1yBYeUlm
2017-08-23 15:21:16 -07:00
Gregory Szorc 619cb94a42 Bug 1393242 - Hook up hglib to HgRepository; r=mshal
Because hglib spawns a persistent process, we introduce a context
manager for Repository. It no-ops by default. On HgRepository it
controls the lifetime of the persistent hg process.

A helper method for running an hg command via hglib has been added.
We can't transition existing methods to hglib because hglib
requires a context manager, which no consumer is using yet.

MozReview-Commit-ID: 8z0fcGFeAm5
2017-08-23 15:09:27 -07:00
Gregory Szorc 734018b339 Bug 1393242 - Helper function to obtain a repository from a build config; r=mshal
Some callers already have a build config object. Let's not
make them call a function that imports buildconfig.

MozReview-Commit-ID: J22HhyVma9y
2017-08-23 15:03:36 -07:00
Gregory Szorc 46138dcc30 Bug 1393503 - Proper error handling for failure to find VCS tool; r=glandium,nalexander
``print()`` has no business being in library code like this. It was
a holdover from this code being copied from bootstrap. So remove it.

While we're here, replace the generic exception with a specific one.
We don't want to be swallowing bugs via ``except Exception``.

MozReview-Commit-ID: 49goUstfPBz
2017-08-24 17:09:09 -07:00
Gregory Szorc 0e2ff43e99 Backed out changesets 18d89d8ab860, ffe8bef74be0, 159028ef12d2, 217260fb6976, 0279960d71ab (bug 1393242)
For a test failure.
2017-08-24 16:07:44 -07:00
Gregory Szorc 58012dbc8f Bug 1393242 - Use hglib for get_files_in_working_directory(); r=mshal
And convert consumers to context managers because hglib requires that.

MozReview-Commit-ID: Ckf1yBYeUlm
2017-08-23 15:21:16 -07:00
Gregory Szorc 3705e0d541 Bug 1393242 - Hook up hglib to HgRepository; r=mshal
Because hglib spawns a persistent process, we introduce a context
manager for Repository. It no-ops by default. On HgRepository it
controls the lifetime of the persistent hg process.

A helper method for running an hg command via hglib has been added.
We can't transition existing methods to hglib because hglib
requires a context manager, which no consumer is using yet.

MozReview-Commit-ID: 8z0fcGFeAm5
2017-08-23 15:09:27 -07:00
Gregory Szorc f7207bbcb5 Bug 1393242 - Helper function to obtain a repository from a build config; r=mshal
Some callers already have a build config object. Let's not
make them call a function that imports buildconfig.

MozReview-Commit-ID: J22HhyVma9y
2017-08-23 15:03:36 -07:00
Gregory Szorc e8622191ee Bug 1392886 - Determine if sparse checkout is being used; r=mshal
The Repository interface gains a new method to determine if a sparse
checkout is present. Mercurial's implementation is somewhat crude,
but it should work (Mercurial's sparse support is still experimental
and I only intend to support sparse checkout in Firefox CI until it
is less experimental). Git's always returns False (for now).

To prove it works and to expose the information more widely, we hook
it up to moz.configure. We do this by first implementing a function
that returns a Repository instance. Then we simply call a function on
it to resolve the sparse checkout flag.

MozReview-Commit-ID: AlsT5LdSPdZ
2017-08-22 20:26:46 -07:00
Gregory Szorc 985dd8628c Bug 1392886 - Expose repository type as an instance property; r=mshal
This will remove the need to sniff class types. The 1 in-tree
consumer doing this has been converted.

MozReview-Commit-ID: I8cUa8J54VE
2017-08-22 20:04:55 -07:00
Gregory Szorc 7db4e6c84a Bug 1392886 - Use abstract base class for Repository; r=mshal
This makes the interface more formalized.

MozReview-Commit-ID: JOjgJjR5MZk
2017-08-23 08:33:56 -07:00
Mike Shal 226405e9dc Bug 1392304 - fix typo in mozversioncontrol for git; r=gps
MozReview-Commit-ID: 1r1Vl5WVhsd
2017-08-18 21:06:08 -04:00
Gregory Szorc 8e15f7253c Bug 1377216 - Use configure-derived VCS info to find repository; r=glandium
For reasons I can't explain, Windows builds are failing intermittently
because they are unable to locate the `hg` binary when running
some SpiderMonkey test processes. These processes use
mozversioncontrol.get_repository_from_env() to locate the
current repository.

We now store VCS info in configure. This makes it available to anything
running in a build system context.

This commit teaches mozversioncontrol.get_repository_from_env()
to import the "buildconfig" module to locate VCS info. If the module
can be imported, it is the sole source of VCS info. Otherwise, we
fall back to the existing detection mechanisms.

This should get rid of the intermittent failure. If it doesn't,
it is still a step in the right direction because it will allow
build system processes to consistently use a well-defined VCS
binary.

MozReview-Commit-ID: DMxXheJLRqH
2017-07-18 15:46:47 -07:00
Ryan VanderMeulen a97112e33f Backed out 6 changesets (bug 1377216) for SM(pkg) bustage on a CLOSED TREE.
Backed out changeset b5701f3ce506 (bug 1377216)
Backed out changeset 1f37aebe0f43 (bug 1377216)
Backed out changeset c8931588f674 (bug 1377216)
Backed out changeset ded5328ba74c (bug 1377216)
Backed out changeset 6cb234539746 (bug 1377216)
Backed out changeset ce836965fd58 (bug 1377216)
2017-07-19 22:14:03 -04:00
Gregory Szorc 681ecc0640 Bug 1377216 - Use configure-derived VCS info to find repository; r=glandium
For reasons I can't explain, Windows builds are failing intermittently
because they are unable to locate the `hg` binary when running
some SpiderMonkey test processes. These processes use
mozversioncontrol.get_repository_from_env() to locate the
current repository.

We now store VCS info in configure. This makes it available to anything
running in a build system context.

This commit teaches mozversioncontrol.get_repository_from_env()
to import the "buildconfig" module to locate VCS info. If the module
can be imported, it is the sole source of VCS info. Otherwise, we
fall back to the existing detection mechanisms.

This should get rid of the intermittent failure. If it doesn't,
it is still a step in the right direction because it will allow
build system processes to consistently use a well-defined VCS
binary.

MozReview-Commit-ID: DMxXheJLRqH
2017-07-18 15:46:47 -07:00
Ted Mielczarek 4a301dd301 bug 1367329 - fix error handling code in mozversioncontrol. r=gps
MozReview-Commit-ID: Bu5FA9PhxJY
2017-06-22 12:54:25 -04:00
Gregory Szorc e6e688b35f Bug 1361172 - Rewrite code for finding files in VCS checkout; r=glandium
We're getting an intermittent failure running `hg manifest` in CI. I
have no clue why.

What I do know is that we now have the mozversioncontrol Python package
for containing utility code for interacting with version control. It is
slightly more robust and I'm willing to support it more than I am
check_utils.py.

This commit adds a new API to our abstract repository class to obtain the
files in the working directory by querying version control.

Since I suspect cwd was coming into play in automation, I've also
added a utility function to mozversioncontrol to attempt to find
a version control checkout from the current working directory. It
simply traces ancestor paths looking for a .hg or .git directory.

Finally, I've ported all callers of the now-deleted API to the new
one. The old code had some "../.." paths in it, meaning it only
worked when cwd was just right. Since we resolve the absolute path
to the checkout and store it on the repo object, I've updated the
code so it should work no matter what cwd is as long as a repo can
be found. I'm not 100% confident I found all consumers assuming cwd.
But it's a start.

I'm not 100% confident this will fix the intermittent issues in CI. But
at least we should get a better error message and at least we'll be
running less hacky code.

MozReview-Commit-ID: AmCraHXcTEX
2017-05-18 16:06:49 -07:00
Nathan Froyd af232b9b9b Bug 1306078 - part 2 - add Repository.get_added_files; r=ted.mielczarek
Figuring out the files that have been added is also something that you
want to do with a source code repository.
2017-02-14 16:12:19 -05:00
Nathan Froyd 0745ffc417 Bug 1306078 - part 1 - add forget_add_remove_files to mozversioncontrol Repository objects; r=gps
This command is useful for users who wish to perform something like the
following:

1. Add/remove a bunch of files;
2. Examine the additions/removals/modifications for interesting changes;
3. Reject the add/remove if it doesn't meet some set of conditions.
2017-02-14 16:12:19 -05:00
Nathan Froyd cbfb241a58 Bug 1334556 - make GitRepository.get_modified_files slightly more idiomatic; r=gps
Having to munge the output of `git status --porcelain` is unseemly when
there are approaches that will give us what we want directly.
2017-01-27 13:51:58 -05:00
Kartikaya Gupta 23c60e5edd Bug 1313446 - Detect a git repository when inside a git worktree. r=glandium
MozReview-Commit-ID: 8ngY6kNcp05
2016-12-08 08:28:36 -10:00
Ted Mielczarek 5e679ea604 bug 1294565 - add some more helpers to mozversioncontrol, add MozbuildObject.repository. r=gps
I wanted to be able to do some VCS interaction from a mach command, and we
didn't have anything suitable, so I tore up mozversioncontrol and replaced
it with a framework to hang new features off of. I've only implemented
the bits I need currently (get_modified_files and add_remove_files),
but it should be straightforward to add more functionality there.

This patch also adds a `repository` property to `MozbuildObject`, which will
return a `Repository` object for the topsrcdir to make using these helpers
even easier for `MozbuildObject`-derived classes.

MozReview-Commit-ID: Gw6Ixp1ltiN
2016-09-29 06:48:37 -04:00
Gregory Szorc 2af70a17f7 Bug 1225599 - Pull Mercurial repos with common 3rd party extensions disabled; r=dminor
Running old extensions with newer versions of Mercurial may crash `hg`
due to the old extension accessing something or doing something that has
been changed in the new release.

To minimize the risk of this happening, we disable common 3rd party
extensions when cloning or pulling as part of `mach mercurial-setup`. We
don't want to disable everything because some extensions (like
remotenames) provide features the user may want enabled as part of the
clone/update. This leaves the door open for more failures. Hopefully
this approach is sufficient. We can always revisit later.
2015-12-15 10:47:33 -08:00
Birunthan Mohanathas 7ec48b5327 Bug 1197527 - Consolidate obtaining hg path into mozversioncontrol.get_hg_path; r=gps
DONTBUILD
2015-08-24 14:37:42 -04:00
Gregory Szorc c0668016dd Bug 1128586 - Properly look for Mercurial version; r=RyanVM
`mercurial version` doesn't always print the version number. `mercurial
--version` does. Use the latter.
2015-04-27 10:43:25 -07:00
Andrew Halberstadt c89ea5ca9b Bug 1092149 - Use LooseVersion instead of StrictVersion in |mach mercurial-setup| so release candidates work, r=gps 2014-10-31 15:09:39 -04:00
Gregory Szorc 96c0ce82ef Bug 1033656 - Add reviewboard to mach mercurial-setup; version checking; r=smacleod
We want to make it turnkey for people to use reviewboard. So, we add
reviewboard and related functionality to |mach mercurial-setup|.

Since the reviewboard extension only works in Mercurial 3.0 and newer,
we add some version detection for the Mercurial version. This should
have been done months ago. We now have it.

I also took the opportunity to inform |mach bootstrap| that Mercurial
2.x is no longer modern.

I also updated the messaging around mq to encourage fewer new users to
use it. You may find this controversial. People can always ignore the
message.

Finally, I also added a histedit prompt to the mix, since a lot of
people don't know about that and many find it useful.

I could have broken this into multiple patches. Meh.
2014-07-02 14:05:42 -07:00