1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-22 14:52:40 +01:00
No description
Find a file
epriestley 0e27dbfd17 Refactor getWorkingCopyStatus() into getUncommittedStatus() and getCommitRangeStatus()
Summary:
See discussion in D4049.

The getWorkingCopyStatus() method gets called from requireCleanWorkingCopy() in a lot of places, which triggers resolution of the base of the commit range. This is unnecessary; we do not need to examine the base commit in order to determine whether the working copy is dirty or not. This causes problems, in D4049 and elsewhere (we currently have a lot of fluff calls to setDefaultBaseCommit() in workflows which need to call requireCleanWorkingCopy() but do not ever use commit ranges, such as `arc patch`). This is mostly an artifact of SVN, where the "commit range" and "uncommitted stuff in the working copy" are always the same.

  - Split the method into two status methods: getUncommittedStatus() (uncommitted stuff in the working copy, required by requireCleanWorkingCopy()) and getCommitRangeStatus() (committed stuff in the commit range).
  - Lift caching out of the implementations into the base class.
  - Dirty the cache after we commit.

This doesn't do anything useful on its own and creates one caching problem (`commitRangeStatusCache` is not invalidated when the commit range changes because of `setBaseCommit()` or similar) but I wanted to break things apart here. I won't land it until there's a more complete picture.

This creates a minor performance regression in git and hg (we run less stuff in parallel than previously) but all the commands should be disk-bound anyway and the regression should be minor. It prevents a larger regression in `hg` in D4049, and lets us do less work to arrive at common error states (dirty working copy). We can examine perf at the end of this change sequence.

Test Plan: Ran unit tests, various `arc` commands.

Reviewers: vrana

Reviewed By: vrana

CC: aran

Differential Revision: https://secure.phabricator.com/D4095
2012-12-17 12:53:28 -08:00
bin Make bin/arc less linux-centered, more UNIX-agnostic 2012-07-03 06:34:49 -07:00
externals Update PEP8 2012-12-14 17:50:18 -08:00
resources Delete license headers from files 2012-11-05 11:16:24 -08:00
scripts Parse "--help" correctly in arc 2012-11-22 08:36:28 -08:00
src Refactor getWorkingCopyStatus() into getUncommittedStatus() and getCommitRangeStatus() 2012-12-17 12:53:28 -08:00
.arcconfig Delete license headers from files 2012-11-05 11:16:24 -08:00
.divinerconfig Make the "this is technical documentation" message of "Arcanist Overview" more clear 2012-08-10 11:37:30 -07:00
.editorconfig Specify config for text editors 2012-11-03 00:13:53 -07:00
.gitignore Allow arcanist to search for libphutil in externals/includes/ 2012-08-10 14:58:19 -07:00
LICENSE Delete license headers from files 2012-11-05 11:16:24 -08:00
NOTICE Delete license headers from files 2012-11-05 11:16:24 -08:00
README Delete license headers from files 2012-11-05 11:16:24 -08:00

WHAT IS ARCANIST?

Arcanist is the command-line tool for Phabricator. It allows you to interact
with Phabricator installs to send code for review, download patches, transfer
files, view status, make API calls, and various other things. You can find
a complete user guide here:

  http://www.phabricator.com/docs/phabricator/article/Arcanist_User_Guide.html

For more information about Phabricator, see:

  http://phabricator.org/

LICENSE

Arcanist is released under the Apache 2.0 license except as otherwise noted.