Skip to content

Commit

Permalink
Make pre-build.py re-runnable on Windows (GPUOpen-Tools#66)
Browse files Browse the repository at this point in the history
* Make pre-build.py re-runnable on Windows

pre-build.py couldn't be run twice. On the second run, the
git pull failed with

   Directory /git/gpu_performance_api/external/Lib/AMD/ADL exists.
       Using 'git pull' to get latest
       You are not currently on a branch.
       Please specify which branch you want to merge with.
       See git-pull(1) for details.

    	   git pull <remote> <branch>

	   'git pull' failed with returncode:

This happens because the previous run intentionally checks
out a specific commit, leaving the workspace in a detached state.
The subsequent run tries to do a 'git pull origin' and that can't
be done while the workspace is detached. I've changed the 'git
pull' to a 'git fetch --tags -f', which is then followed by 'git
checkout <requested change>'. That fixes that issue.

However, there is a lot of waste in the likely scenario that the
workspace is already checked out to the commit the script wants it
at. So I've added a check for that and we now no-op the git workspace
update in that case. That reduces a many-seconds phase of the script
to almost no time.

Co-authored-by: John Cortell <[email protected]>
  • Loading branch information
jcortell68 and John Cortell authored Dec 29, 2022
1 parent 63f2ffc commit 57f4eba
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions scripts/fetch_dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,16 +89,24 @@ def UpdateGitHubRepo(repoRootUrl, location, commit):
# Add script directory to targetPath.
targetPath = os.path.join(gpaRoot, location)

reqdCommit = commit
# 'location' has forward slashes even on Windows. Clean up the final path
# for purely aesthetical reasons (script output)
targetPath = os.path.realpath(targetPath)

print("\nChecking out commit: %s for %s\n"%(reqdCommit, targetPath))
reqdCommit = commit

if os.path.isdir(targetPath):
# Directory exists - get latest from git using pull.
print("Directory " + targetPath + " exists. \n\tUsing 'git pull' to get latest")
sys.stdout.flush()
try:
subprocess.check_call(["git", "-C", targetPath, "pull", "origin"], shell=SHELLARG)
if reqdCommit is not None:
currentCommit = subprocess.check_output(["git", "-C", targetPath, "rev-parse", "HEAD"], shell=SHELLARG).decode().strip()
if currentCommit == reqdCommit:
print("Directory " + targetPath + " exists and is at expected commit. Nothing to do.")
sys.stdout.flush()
return
print("Directory " + targetPath + " exists but is not at the required commit. \n\tUsing 'git fetch' and 'git checkout' to move the workspace to " + reqdCommit[0:7])
sys.stdout.flush()
subprocess.check_call(["git", "-C", targetPath, "fetch", "--tags", "-f", "origin"], shell=SHELLARG)
except subprocess.CalledProcessError as e:
print ("'git pull' failed with returncode: %d\n" % e.returncode)
sys.exit(1)
Expand Down

0 comments on commit 57f4eba

Please sign in to comment.