Skip to content

Commit 33649ab

Browse files
committed
refactor: share active cleanup metadata envelope
1 parent 5ef1b46 commit 33649ab

1 file changed

Lines changed: 64 additions & 46 deletions

File tree

inc/Workspace/Workspace.php

Lines changed: 64 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2144,18 +2144,14 @@ private function build_active_no_signal_finalized_metadata( array $row ): array|
21442144
return new \WP_Error('missing_pr_url', 'merged PR evidence is missing html_url');
21452145
}
21462146

2147-
$base_metadata = is_array($row['metadata'] ?? null) ? $row['metadata'] : array();
2148-
$metadata = array_merge(
2149-
$base_metadata,
2150-
array(
2151-
'handle' => $handle,
2152-
'repo' => $repo,
2153-
'branch' => $branch,
2154-
'path' => $path,
2155-
'observed_at' => gmdate('c'),
2156-
'last_seen_at' => gmdate('c'),
2157-
),
2158-
WorktreeContextInjector::build_finalizer_metadata(WorktreeContextInjector::STATE_MERGED, $pr_url)
2147+
$metadata = $this->build_active_no_signal_cleanup_metadata(
2148+
$row,
2149+
$handle,
2150+
$repo,
2151+
$branch,
2152+
$path,
2153+
WorktreeContextInjector::STATE_MERGED,
2154+
$pr_url
21592155
);
21602156
$metadata['auto_finalized_by'] = 'active_no_signal_finalized_apply';
21612157
$metadata['auto_finalized_signal'] = 'pr-merged';
@@ -2210,18 +2206,13 @@ private function build_active_no_signal_equivalent_clean_metadata( array $row ):
22102206
return $equivalence;
22112207
}
22122208

2213-
$base_metadata = is_array($row['metadata'] ?? null) ? $row['metadata'] : array();
2214-
$metadata = array_merge(
2215-
$base_metadata,
2216-
array(
2217-
'handle' => $handle,
2218-
'repo' => $repo,
2219-
'branch' => $branch,
2220-
'path' => $path,
2221-
'observed_at' => gmdate('c'),
2222-
'last_seen_at' => gmdate('c'),
2223-
),
2224-
WorktreeContextInjector::build_finalizer_metadata(WorktreeContextInjector::STATE_CLEANUP_ELIGIBLE)
2209+
$metadata = $this->build_active_no_signal_cleanup_metadata(
2210+
$row,
2211+
$handle,
2212+
$repo,
2213+
$branch,
2214+
$path,
2215+
WorktreeContextInjector::STATE_CLEANUP_ELIGIBLE
22252216
);
22262217
$effective_status = (string) ( $equivalence['upstream_equivalence']['effective_status'] ?? '' );
22272218
$signal = 'contained_non_default_remote' === $effective_status ? 'contained-non-default-remote' : 'upstream-equivalent-clean';
@@ -2261,18 +2252,13 @@ private function build_active_no_signal_merged_to_default_metadata( array $row )
22612252
return $evidence;
22622253
}
22632254

2264-
$base_metadata = is_array($row['metadata'] ?? null) ? $row['metadata'] : array();
2265-
$metadata = array_merge(
2266-
$base_metadata,
2267-
array(
2268-
'handle' => $handle,
2269-
'repo' => $repo,
2270-
'branch' => $branch,
2271-
'path' => (string) ( $evidence['path'] ?? $path ),
2272-
'observed_at' => gmdate('c'),
2273-
'last_seen_at' => gmdate('c'),
2274-
),
2275-
WorktreeContextInjector::build_finalizer_metadata(WorktreeContextInjector::STATE_MERGED)
2255+
$metadata = $this->build_active_no_signal_cleanup_metadata(
2256+
$row,
2257+
$handle,
2258+
$repo,
2259+
$branch,
2260+
(string) ( $evidence['path'] ?? $path ),
2261+
WorktreeContextInjector::STATE_MERGED
22762262
);
22772263
$metadata['auto_finalized_by'] = 'active_no_signal_merged_apply';
22782264
$metadata['auto_finalized_signal'] = 'merged-to-default';
@@ -2299,25 +2285,57 @@ private function build_active_no_signal_remote_clean_metadata( array $row ): arr
22992285
return $evidence;
23002286
}
23012287

2302-
$base_metadata = is_array($row['metadata'] ?? null) ? $row['metadata'] : array();
2303-
$metadata = array_merge(
2288+
$metadata = $this->build_active_no_signal_cleanup_metadata(
2289+
$row,
2290+
$handle,
2291+
$repo,
2292+
$branch,
2293+
(string) ( $evidence['path'] ?? $path ),
2294+
WorktreeContextInjector::STATE_CLEANUP_ELIGIBLE
2295+
);
2296+
$metadata['auto_finalized_by'] = 'active_no_signal_remote_clean_apply';
2297+
$metadata['auto_finalized_signal'] = 'remote-tracking-clean';
2298+
$metadata['auto_finalized_reason'] = 'active/no-signal report found a clean local worktree whose work is preserved by its remote branch';
2299+
$metadata['cleanup_eligibility_evidence'] = $evidence;
2300+
2301+
return $metadata;
2302+
}
2303+
2304+
/**
2305+
* Build the common cleanup metadata envelope for active/no-signal apply paths.
2306+
*
2307+
* @param array<string,mixed> $row Evidence row.
2308+
* @param string $handle Worktree handle.
2309+
* @param string $repo Repository name.
2310+
* @param string $branch Branch name.
2311+
* @param string $path Canonical worktree path to store.
2312+
* @param string $finalizer_state Lifecycle finalizer state.
2313+
* @param string|null $finalizer_url Optional finalizer URL.
2314+
* @return array<string,mixed>
2315+
*/
2316+
private function build_active_no_signal_cleanup_metadata(
2317+
array $row,
2318+
string $handle,
2319+
string $repo,
2320+
string $branch,
2321+
string $path,
2322+
string $finalizer_state,
2323+
?string $finalizer_url = null
2324+
): array {
2325+
$base_metadata = is_array($row['metadata'] ?? null) ? $row['metadata'] : array();
2326+
2327+
return array_merge(
23042328
$base_metadata,
23052329
array(
23062330
'handle' => $handle,
23072331
'repo' => $repo,
23082332
'branch' => $branch,
2309-
'path' => (string) ( $evidence['path'] ?? $path ),
2333+
'path' => $path,
23102334
'observed_at' => gmdate('c'),
23112335
'last_seen_at' => gmdate('c'),
23122336
),
2313-
WorktreeContextInjector::build_finalizer_metadata(WorktreeContextInjector::STATE_CLEANUP_ELIGIBLE)
2337+
WorktreeContextInjector::build_finalizer_metadata($finalizer_state, $finalizer_url)
23142338
);
2315-
$metadata['auto_finalized_by'] = 'active_no_signal_remote_clean_apply';
2316-
$metadata['auto_finalized_signal'] = 'remote-tracking-clean';
2317-
$metadata['auto_finalized_reason'] = 'active/no-signal report found a clean local worktree whose work is preserved by its remote branch';
2318-
$metadata['cleanup_eligibility_evidence'] = $evidence;
2319-
2320-
return $metadata;
23212339
}
23222340

23232341
/**

0 commit comments

Comments
 (0)