mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-03 20:22:46 +01:00
2de96c6f08
Summary: If the repo isn't bare, than we need copy it's remote instead of using it. This will probably not work if an SSH key is provided to phabricator, and in any case you must delete all workspaces that were already created. This will make landing those repos slower; I plan to just delete and re-clone all repos on my instance. It will probably be simpler to just make a bare-repo a requirement of all the git-landing work. Test Plan: landed from hosted and un-hosted repos, checked git-remote url in each newly cloned workspace. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley CC: Korvin, epriestley, aran Differential Revision: https://secure.phabricator.com/D7592
73 lines
1.7 KiB
PHP
73 lines
1.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Can't find a good place for this, so I'm putting it in the most notably
|
|
* wrong place.
|
|
*/
|
|
final class DifferentialGetWorkingCopy {
|
|
|
|
/**
|
|
* Creates and/or cleans a workspace for the requested repo.
|
|
*
|
|
* return ArcanistGitAPI
|
|
*/
|
|
public static function getCleanGitWorkspace(
|
|
PhabricatorRepository $repo) {
|
|
|
|
$origin_path = $repo->getLocalPath();
|
|
|
|
$path = rtrim($origin_path, '/');
|
|
$path = $path . '__workspace';
|
|
|
|
if (!Filesystem::pathExists($path)) {
|
|
$repo->execxLocalCommand(
|
|
'clone -- file://%s %s',
|
|
$origin_path,
|
|
$path);
|
|
|
|
if (!$repo->isHosted()) {
|
|
id(new ArcanistGitAPI($path))->execxLocal(
|
|
'remote set-url origin %s',
|
|
$repo->getRemoteURI());
|
|
}
|
|
}
|
|
|
|
$workspace = new ArcanistGitAPI($path);
|
|
$workspace->execxLocal('clean -f -d');
|
|
$workspace->execxLocal('checkout master');
|
|
$workspace->execxLocal('fetch');
|
|
$workspace->execxLocal('reset --hard origin/master');
|
|
$workspace->reloadWorkingCopy();
|
|
|
|
return $workspace;
|
|
}
|
|
|
|
/**
|
|
* Creates and/or cleans a workspace for the requested repo.
|
|
*
|
|
* return ArcanistMercurialAPI
|
|
*/
|
|
public static function getCleanMercurialWorkspace(
|
|
PhabricatorRepository $repo) {
|
|
|
|
$origin_path = $repo->getLocalPath();
|
|
|
|
$path = rtrim($origin_path, '/');
|
|
$path = $path . '__workspace';
|
|
|
|
if (!Filesystem::pathExists($path)) {
|
|
$repo->execxLocalCommand(
|
|
'clone -- file://%s %s',
|
|
$origin_path,
|
|
$path);
|
|
}
|
|
|
|
$workspace = new ArcanistMercurialAPI($path);
|
|
$workspace->execxLocal('pull');
|
|
$workspace->execxLocal('update --clean default');
|
|
$workspace->reloadWorkingCopy();
|
|
|
|
return $workspace;
|
|
}
|
|
|
|
}
|