Auto-reconcile subrepo history when josh filter changes
When the exclude list changes, josh-proxy recomputes filtered history with new SHAs, breaking common ancestry with the subrepo. Instead of requiring a manual reset (force-push), forward sync now detects the filter change and creates a reconciliation merge commit that connects the old and new histories — no force-push, no re-clone needed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -208,10 +208,20 @@ _sync_direction() {
|
||||
fi
|
||||
fi
|
||||
|
||||
# Run sync
|
||||
# Check for filter change (forward only — reverse uses same filter)
|
||||
local result
|
||||
if [ "$direction" = "forward" ]; then
|
||||
result=$(forward_sync)
|
||||
local prev_filter
|
||||
prev_filter=$(echo "$state" | jq -r '.last_forward.josh_filter // empty')
|
||||
|
||||
if [ -n "$prev_filter" ] && [ "$prev_filter" != "$JOSH_FILTER" ]; then
|
||||
log "WARN" "Josh filter changed — reconciling histories"
|
||||
log "INFO" "Old: ${prev_filter}"
|
||||
log "INFO" "New: ${JOSH_FILTER}"
|
||||
result=$(reconcile_filter_change)
|
||||
else
|
||||
result=$(forward_sync)
|
||||
fi
|
||||
else
|
||||
result=$(reverse_sync)
|
||||
fi
|
||||
@@ -240,8 +250,9 @@ _sync_direction() {
|
||||
--arg s_sha "${subrepo_sha_now:-}" \
|
||||
--arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
||||
--arg status "$result" \
|
||||
--arg filter "$JOSH_FILTER" \
|
||||
--argjson prev "$state" \
|
||||
'$prev + {last_forward: {mono_sha:$m_sha, subrepo_sha:$s_sha, timestamp:$ts, status:$status}}')
|
||||
'$prev + {last_forward: {mono_sha:$m_sha, subrepo_sha:$s_sha, timestamp:$ts, status:$status, josh_filter:$filter}}')
|
||||
else
|
||||
local mono_sha_now
|
||||
mono_sha_now=$(git rev-parse "origin/${branch}" 2>/dev/null || echo "")
|
||||
|
||||
Reference in New Issue
Block a user