Prechádzať zdrojové kódy

Fix clashing worktrees

bryan 3 dní pred
rodič
commit
3a659b4798
1 zmenil súbory, kde vykonal 16 pridanie a 9 odobranie
  1. 16 9
      openwrtbuilder

+ 16 - 9
openwrtbuilder

@@ -519,7 +519,7 @@ from_source() {
     fi
   fi
 
-  # Remove build directories and worktrees
+  # Remove all build directories and worktrees
   if ((RESET)); then
     if [[ -d "$BUILD_DIR" || -d "$worktree_meta" ]]; then
       execute git -C "$SRC_DIR" worktree remove --force --force "$BUILD_DIR"
@@ -537,23 +537,30 @@ from_source() {
     execute mkdir -p "$SRC_DIR"
     execute git clone "$src_url" "$SRC_DIR"
   fi
+  
+  # Clean up orphaned or conflicting worktree if needed
+  execute git -C "$SRC_DIR" worktree prune --verbose
 
-  # Clean up orphaned worktree if needed
-  if [[ ! -d "$BUILD_DIR" || ! -d "$worktree_meta" ]]; then
-    [[ -d "$BUILD_DIR" ]] && execute rm -rf "$BUILD_DIR"
-    [[ -d "$worktree_meta" ]] && execute rm -rf "$worktree_meta"
-    execute git -C "$SRC_DIR" worktree prune --verbose
+  # Remove build dir if it exists but is not a worktree
+  if [[ -d "$BUILD_DIR" ]] && ! git -C "$SRC_DIR" worktree list | grep -q "$BUILD_DIR"; then
+    execute rm -rf "$BUILD_DIR"
+  fi
+
+  # Remove any worktree using this ref elsewhere
+  existing_worktree=$(git -C "$SRC_DIR" worktree list | awk "/\\[$ref\\]/ {print \$1}")
+  if [[ -n "$existing_worktree" && "$existing_worktree" != "$BUILD_DIR" ]]; then
+    echo "Removing conflicting worktree at $existing_worktree for ref $ref"
+    execute git -C "$SRC_DIR" worktree remove --force "$existing_worktree"
+    [[ -d "$existing_worktree" ]] && execute rm -rf "$existing_worktree"
   fi
 
   # Add or update worktree
-  if [[ -d "$BUILD_DIR" && -d "$worktree_meta" ]]; then
+  if [[ -d "$BUILD_DIR" ]] && git -C "$SRC_DIR" worktree list | grep -q "$BUILD_DIR"; then
     execute git -C "$BUILD_DIR" checkout "$ref"
-    # pull if ref is a branch
     if git -C "$SRC_DIR" show-ref --verify --quiet "refs/heads/$ref"; then
       execute git -C "$BUILD_DIR" pull
     fi
   else
-    # branch or tag?
     if git -C "$SRC_DIR" show-ref --verify --quiet "refs/heads/$ref"; then
       execute git -C "$SRC_DIR" worktree add "$BUILD_DIR" "$ref"
     else