Skip to content

Commit ffc3ed3

Browse files
committed
fix: keep sequential branch numbering beyond 999
1 parent 30a997a commit ffc3ed3

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

scripts/bash/create-new-feature.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ get_highest_from_specs() {
8989
for dir in "$specs_dir"/*; do
9090
[ -d "$dir" ] || continue
9191
dirname=$(basename "$dir")
92-
# Only match sequential prefixes (###-*), skip timestamp dirs
93-
if echo "$dirname" | grep -q '^[0-9]\{3\}-'; then
94-
number=$(echo "$dirname" | grep -o '^[0-9]\{3\}')
92+
# Match sequential prefixes (>=3 digits), but skip timestamp dirs.
93+
if echo "$dirname" | grep -Eq '^[0-9]{3,}-' && ! echo "$dirname" | grep -Eq '^[0-9]{8}-[0-9]{6}-'; then
94+
number=$(echo "$dirname" | grep -Eo '^[0-9]+')
9595
number=$((10#$number))
9696
if [ "$number" -gt "$highest" ]; then
9797
highest=$number
@@ -115,9 +115,9 @@ get_highest_from_branches() {
115115
# Clean branch name: remove leading markers and remote prefixes
116116
clean_branch=$(echo "$branch" | sed 's/^[* ]*//; s|^remotes/[^/]*/||')
117117

118-
# Extract feature number if branch matches pattern ###-*
119-
if echo "$clean_branch" | grep -q '^[0-9]\{3\}-'; then
120-
number=$(echo "$clean_branch" | grep -o '^[0-9]\{3\}' || echo "0")
118+
# Extract sequential feature number (>=3 digits), skip timestamp branches.
119+
if echo "$clean_branch" | grep -Eq '^[0-9]{3,}-' && ! echo "$clean_branch" | grep -Eq '^[0-9]{8}-[0-9]{6}-'; then
120+
number=$(echo "$clean_branch" | grep -Eo '^[0-9]+' || echo "0")
121121
number=$((10#$number))
122122
if [ "$number" -gt "$highest" ]; then
123123
highest=$number

tests/test_timestamp_branches.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,18 @@ def test_sequential_ignores_timestamp_dirs(self, git_repo: Path):
147147
branch = line.split(":", 1)[1].strip()
148148
assert branch == "003-next-feat", f"expected 003-next-feat, got: {branch}"
149149

150+
def test_sequential_supports_four_digit_prefixes(self, git_repo: Path):
151+
"""Sequential numbering should continue past 999 without truncation."""
152+
(git_repo / "specs" / "999-last-3digit").mkdir(parents=True)
153+
(git_repo / "specs" / "1000-first-4digit").mkdir(parents=True)
154+
result = run_script(git_repo, "--short-name", "next-feat", "Next feature")
155+
assert result.returncode == 0, result.stderr
156+
branch = None
157+
for line in result.stdout.splitlines():
158+
if line.startswith("BRANCH_NAME:"):
159+
branch = line.split(":", 1)[1].strip()
160+
assert branch == "1001-next-feat", f"expected 1001-next-feat, got: {branch}"
161+
150162

151163
# ── check_feature_branch Tests ───────────────────────────────────────────────
152164

0 commit comments

Comments
 (0)