azcodr 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,177 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- # ==============================================================================
5
- # resolve_repo.sh
6
- # Deterministically resolves whether a remote Git URL is cloned locally,
7
- # EVEN IF CLONED UNDER A COMPLETELY DIFFERENT FOLDER NAME.
8
- #
9
- # Usage: ./resolve_repo.sh <REPO_URL> [--check-only] [--dest-dir <DIR>]
10
- # ==============================================================================
11
-
12
- REPO_URL="${1:-}"
13
- CHECK_ONLY=false
14
- DEST_DIR=""
15
-
16
- if [ -z "$REPO_URL" ]; then
17
- echo "Usage: $0 <REPO_URL> [--check-only] [--dest-dir <DIR>]" >&2
18
- exit 1
19
- fi
20
-
21
- shift || true
22
- while [[ $# -gt 0 ]]; do
23
- case "$1" in
24
- --check-only)
25
- CHECK_ONLY=true
26
- shift
27
- ;;
28
- --dest-dir)
29
- DEST_DIR="$2"
30
- shift 2
31
- ;;
32
- *)
33
- echo "Unknown option: $1" >&2
34
- exit 1
35
- ;;
36
- esac
37
- done
38
-
39
- normalize_git_url() {
40
- local url="$1"
41
- url="${url%.git}"
42
- url="${url%/}"
43
- url=$(echo "$url" | sed -E 's/^(https?:\/\/|ssh:\/\/git@|ssh:\/\/|git@)//')
44
- url=$(echo "$url" | sed -E 's/:/\//')
45
- echo "$url" | tr '[:upper:]' '[:lower:]'
46
- }
47
-
48
- TARGET_NORM=$(normalize_git_url "$REPO_URL")
49
- REPO_NAME=$(basename "$TARGET_NORM")
50
- CURRENT_DIR="$(pwd)"
51
-
52
- # Check if a specific directory matches the target URL by inspecting its remotes
53
- matches_target_url() {
54
- local dir="$1"
55
- if [ ! -d "$dir/.git" ]; then
56
- return 1
57
- fi
58
-
59
- # Check all configured remotes (origin, upstream, etc.)
60
- local remotes
61
- remotes=$(git -C "$dir" config --get-regexp '^remote\..*\.url' 2>/dev/null | awk '{print $2}' || true)
62
- for r in $remotes; do
63
- local r_norm
64
- r_norm=$(normalize_git_url "$r")
65
- if [ "$r_norm" = "$TARGET_NORM" ]; then
66
- return 0
67
- fi
68
- done
69
- return 1
70
- }
71
-
72
- FOUND_PATH=""
73
-
74
- # ------------------------------------------------------------------------------
75
- # Pass 1: Fast Probe of Standard Conventions
76
- # ------------------------------------------------------------------------------
77
- FAST_CANDIDATES=(
78
- "${DEST_DIR:-}"
79
- "$HOME/projects/$REPO_NAME"
80
- "$(dirname "$CURRENT_DIR")/$REPO_NAME"
81
- "$CURRENT_DIR/$REPO_NAME"
82
- "$CURRENT_DIR"
83
- )
84
-
85
- for cand in "${FAST_CANDIDATES[@]}"; do
86
- [ -z "$cand" ] && continue
87
- if matches_target_url "$cand"; then
88
- FOUND_PATH="$(cd "$cand" && pwd)"
89
- break
90
- fi
91
- done
92
-
93
- # ------------------------------------------------------------------------------
94
- # Pass 2: Deep Scan Across Sibling & Project Roots (Handles ANY folder name!)
95
- # ------------------------------------------------------------------------------
96
- if [ -z "$FOUND_PATH" ]; then
97
- SEARCH_ROOTS=()
98
- PARENT_DIR="$(dirname "$CURRENT_DIR")"
99
- SEARCH_ROOTS+=("$PARENT_DIR")
100
- [ -d "$HOME/projects" ] && [ "$HOME/projects" != "$PARENT_DIR" ] && SEARCH_ROOTS+=("$HOME/projects")
101
- [ -d "$HOME/workspace" ] && SEARCH_ROOTS+=("$HOME/workspace")
102
- [ -d "$HOME/dev" ] && SEARCH_ROOTS+=("$HOME/dev")
103
- [ -d "$HOME/code" ] && SEARCH_ROOTS+=("$HOME/code")
104
-
105
- for root in "${SEARCH_ROOTS[@]}"; do
106
- [ ! -d "$root" ] && continue
107
- # Search maxdepth 2 for any .git directory
108
- while IFS= read -r gitdir; do
109
- repo_candidate="$(dirname "$gitdir")"
110
- if matches_target_url "$repo_candidate"; then
111
- FOUND_PATH="$(cd "$repo_candidate" && pwd)"
112
- break 2
113
- fi
114
- done < <(find "$root" -maxdepth 2 -name ".git" -type d 2>/dev/null || true)
115
- done
116
- fi
117
-
118
- # ------------------------------------------------------------------------------
119
- # Output Resolution
120
- # ------------------------------------------------------------------------------
121
- if [ -n "$FOUND_PATH" ]; then
122
- BRANCH=$(git -C "$FOUND_PATH" branch --show-current 2>/dev/null || true)
123
- if [ -z "$BRANCH" ]; then
124
- BRANCH=$(git -C "$FOUND_PATH" rev-parse --short HEAD 2>/dev/null || echo "unknown")
125
- fi
126
- PORCELAIN=$(git -C "$FOUND_PATH" status --porcelain 2>/dev/null || true)
127
- IS_CLEAN="true"
128
- if [ -n "$PORCELAIN" ]; then
129
- IS_CLEAN="false"
130
- fi
131
- FOLDER_NAME=$(basename "$FOUND_PATH")
132
-
133
- echo "STATUS=ALREADY_CLONED"
134
- echo "LOCAL_PATH=$FOUND_PATH"
135
- echo "LOCAL_FOLDER_NAME=$FOLDER_NAME"
136
- echo "CANONICAL_SLUG=$TARGET_NORM"
137
- echo "CURRENT_BRANCH=$BRANCH"
138
- echo "IS_CLEAN=$IS_CLEAN"
139
- exit 0
140
- fi
141
-
142
- if [ "$CHECK_ONLY" = true ]; then
143
- echo "STATUS=NOT_CLONED"
144
- echo "LOCAL_PATH="
145
- echo "LOCAL_FOLDER_NAME="
146
- echo "CANONICAL_SLUG=$TARGET_NORM"
147
- exit 1
148
- fi
149
-
150
- # ------------------------------------------------------------------------------
151
- # Fallback: Fresh Clone
152
- # ------------------------------------------------------------------------------
153
- if [ -z "$DEST_DIR" ]; then
154
- if [ -d "$HOME/projects" ]; then
155
- DEST_DIR="$HOME/projects/$REPO_NAME"
156
- else
157
- DEST_DIR="$(dirname "$CURRENT_DIR")/$REPO_NAME"
158
- fi
159
- fi
160
-
161
- echo "📥 Repository '$REPO_URL' not found locally under any folder name. Cloning into '$DEST_DIR'..." >&2
162
- mkdir -p "$(dirname "$DEST_DIR")"
163
- git clone "$REPO_URL" "$DEST_DIR" >&2
164
-
165
- FINAL_PATH="$(cd "$DEST_DIR" && pwd)"
166
- BRANCH=$(git -C "$FINAL_PATH" branch --show-current 2>/dev/null || true)
167
- if [ -z "$BRANCH" ]; then
168
- BRANCH=$(git -C "$FINAL_PATH" rev-parse --short HEAD 2>/dev/null || echo "unknown")
169
- fi
170
-
171
- echo "STATUS=CLONED_FRESH"
172
- echo "LOCAL_PATH=$FINAL_PATH"
173
- echo "LOCAL_FOLDER_NAME=$(basename "$FINAL_PATH")"
174
- echo "CANONICAL_SLUG=$TARGET_NORM"
175
- echo "CURRENT_BRANCH=$BRANCH"
176
- echo "IS_CLEAN=true"
177
- exit 0