@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

In Drydock, don't reset current branch to point at unrelated commit

Summary:
Fixes T10037. When we're building commit `aabbccdd`, we currently do this to check it out:

git reset --hard aabbccdd

However, this has an undesirable side effect of moving the current branch pointer to point at `aabbccdd`. The current branch pointer may be some totally different branch which `aabbccdd` is not part of, so this is confusing and misleading.

Instead, use `git reset --hard HEAD` to get the primary effect we want (destroying staged changes) and then `git checkout aabbccdd` to checkout the commit in a detached HEAD state.

Test Plan:
- Ran a build (a commit-focused operation) successfully.
- Verified working copy was pointed at a detached HEAD afterward:

```
builder@sbuild001:/var/drydock/workingcopy-167/repo/git-test-ii$ git status
HEAD detached at ffc7635
nothing to commit, working directory clean
```

- Ran a land (a branch-foused operation) successfully.
- Verified working copy was pointed at a branch afterward:

```
builder@sbuild001:/core/data/drydock/workingcopy-168/repo/git-test$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean
```

Reviewers: chad

Reviewed By: chad

Subscribers: yelirekim

Maniphest Tasks: T10037

Differential Revision: https://secure.phabricator.com/D14850

+7 -8
+7 -8
src/applications/drydock/blueprint/DrydockWorkingCopyBlueprintImplementation.php
··· 249 249 250 250 $ref = idx($spec, 'ref'); 251 251 252 + // Reset things first, in case previous builds left anything staged or 253 + // dirty. 254 + $cmd[] = 'git reset --hard HEAD'; 255 + 252 256 if ($commit !== null) { 253 - $cmd[] = 'git reset --hard %s'; 257 + $cmd[] = 'git checkout %s --'; 254 258 $arg[] = $commit; 255 259 } else if ($branch !== null) { 256 - $cmd[] = 'git checkout %s'; 260 + $cmd[] = 'git checkout %s --'; 257 261 $arg[] = $branch; 258 262 259 263 $cmd[] = 'git reset --hard origin/%s'; ··· 267 271 $arg[] = $ref_ref; 268 272 $arg[] = $ref_ref; 269 273 270 - $cmd[] = 'git checkout %s'; 274 + $cmd[] = 'git checkout %s --'; 271 275 $arg[] = $ref_ref; 272 - 273 - $cmd[] = 'git reset --hard %s'; 274 - $arg[] = $ref_ref; 275 - } else { 276 - $cmd[] = 'git reset --hard HEAD'; 277 276 } 278 277 279 278 $cmd = implode(' && ', $cmd);