mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-12-22 21:40:54 +01:00
[Arcanist] move scratch directory into the vcs metadata directory
Summary: Using .arc as the scratch and per-repository configuration directory has some unfortunate consequenses in the real world. Among other things, people forget to .gitignore it so it gets checked in. Test Plan: the only thing that seems to use this is the relative commit setting for git. This diff consists of 2 commits, one for the .gitignore and one for everything else. Comment out the portion of my .git/config that defines the upstream for the branch. Run arc diff --only with HEAD^ in .arc/default-relative-commit. See that .gitignore is not included in the resultant diff, that .arc no longer exists, and that .git/arc exists and has HEAD^ in .git/arc/default-relative-commit. Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Maniphest Tasks: T1233 Differential Revision: https://secure.phabricator.com/D2725
This commit is contained in:
parent
6d98ac0e3d
commit
1100e8768a
5 changed files with 40 additions and 3 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,4 +3,3 @@
|
|||
/src/.phutil_module_cache
|
||||
/docs/
|
||||
/.divinercache/
|
||||
/.arc/
|
||||
|
|
|
@ -53,6 +53,10 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
|||
return 'git';
|
||||
}
|
||||
|
||||
public function getMetadataPath() {
|
||||
return $this->getPath('.git');
|
||||
}
|
||||
|
||||
public function getHasCommits() {
|
||||
return !$this->repositoryHasNoCommits;
|
||||
}
|
||||
|
@ -192,7 +196,7 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
|||
if ($default_relative) {
|
||||
$this->relativeExplanation =
|
||||
"it is the merge-base of '{$default_relative}' and HEAD, as ".
|
||||
"specified in '.arc/default-relative-commit'.";
|
||||
"specified in '.git/arc/default-relative-commit'.";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -58,6 +58,10 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
|||
return 'hg';
|
||||
}
|
||||
|
||||
public function getMetadataPath() {
|
||||
return $this->getPath('.hg');
|
||||
}
|
||||
|
||||
public function getSourceControlBaseRevision() {
|
||||
return $this->getCanonicalRevisionName($this->getRelativeCommit());
|
||||
}
|
||||
|
|
|
@ -175,6 +175,7 @@ abstract class ArcanistRepositoryAPI {
|
|||
abstract public function supportsRelativeLocalCommits();
|
||||
abstract public function getWorkingCopyRevision();
|
||||
abstract public function updateWorkingCopy();
|
||||
abstract public function getMetadataPath();
|
||||
abstract public function loadWorkingCopyDifferentialRevisions(
|
||||
ConduitClient $conduit,
|
||||
array $query);
|
||||
|
@ -353,7 +354,32 @@ abstract class ArcanistRepositoryAPI {
|
|||
* @task scratch
|
||||
*/
|
||||
public function getScratchFilePath($path) {
|
||||
return $this->getPath('.arc/'.$path);
|
||||
$new_scratch_path = Filesystem::resolvePath(
|
||||
'arc',
|
||||
$this->getMetadataPath());
|
||||
|
||||
static $checked = false;
|
||||
if (!$checked) {
|
||||
$checked = true;
|
||||
$old_scratch_path = $this->getPath('.arc');
|
||||
// we only want to do the migration once
|
||||
// unfortunately, people have checked in .arc directories which
|
||||
// means that the old one may get recreated after we delete it
|
||||
if (Filesystem::pathExists($old_scratch_path) &&
|
||||
!Filesystem::pathExists($new_scratch_path)) {
|
||||
Filesystem::createDirectory($new_scratch_path);
|
||||
$existing_files = Filesystem::listDirectory($old_scratch_path, true);
|
||||
foreach ($existing_files as $file) {
|
||||
$new_path = Filesystem::resolvePath($file, $new_scratch_path);
|
||||
$old_path = Filesystem::resolvePath($file, $old_scratch_path);
|
||||
Filesystem::writeFile(
|
||||
$new_path,
|
||||
Filesystem::readFile($old_path));
|
||||
}
|
||||
Filesystem::remove($old_scratch_path);
|
||||
}
|
||||
}
|
||||
return Filesystem::resolvePath($path, $new_scratch_path);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -36,6 +36,10 @@ final class ArcanistSubversionAPI extends ArcanistRepositoryAPI {
|
|||
return 'svn';
|
||||
}
|
||||
|
||||
public function getMetadataPath() {
|
||||
return $this->getPath('.svn');
|
||||
}
|
||||
|
||||
protected function buildLocalFuture(array $argv) {
|
||||
|
||||
$argv[0] = 'svn '.$argv[0];
|
||||
|
|
Loading…
Reference in a new issue