fetchPrStatus function
Fetch PR status for the current branch using gh pr view.
Implementation
Future<PrStatus?> fetchPrStatus({String? cwd}) async {
if (!await getIsGit(cwd: cwd)) return null;
final branch = await getBranch(cwd: cwd);
final defaultBranch = await getDefaultBranch(cwd: cwd);
if (branch == defaultBranch) return null;
try {
final result = await Process.run(
'gh',
[
'pr',
'view',
'--json',
'number,url,reviewDecision,isDraft,headRefName,state',
],
workingDirectory: cwd,
).timeout(const Duration(milliseconds: _ghTimeoutMs));
if (result.exitCode != 0) return null;
final stdout = (result.stdout as String).trim();
if (stdout.isEmpty) return null;
final data = json.decode(stdout) as Map<String, dynamic>;
final headRefName = data['headRefName'] as String? ?? '';
final state = data['state'] as String? ?? '';
if (headRefName == defaultBranch ||
headRefName == 'main' ||
headRefName == 'master') {
return null;
}
if (state == 'MERGED' || state == 'CLOSED') return null;
return PrStatus(
number: data['number'] as int,
url: data['url'] as String,
reviewState: deriveReviewState(
isDraft: data['isDraft'] as bool? ?? false,
reviewDecision: data['reviewDecision'] as String? ?? '',
),
);
} catch (_) {
return null;
}
}