findRemoteBase function

Future<String?> findRemoteBase({
  1. String? cwd,
})

Find the best remote branch to use as a base.

Implementation

Future<String?> findRemoteBase({String? cwd}) async {
  // Try tracking branch
  final tracking = await _runGit([
    'rev-parse',
    '--abbrev-ref',
    '--symbolic-full-name',
    '@{u}',
  ], cwd: cwd);
  if (tracking.code == 0 && tracking.stdout.trim().isNotEmpty) {
    return tracking.stdout.trim();
  }

  // Try remote show
  final remoteRefs = await _runGit([
    'remote',
    'show',
    'origin',
    '--',
    'HEAD',
  ], cwd: cwd);
  if (remoteRefs.code == 0) {
    final match = RegExp(r'HEAD branch: (\S+)').firstMatch(remoteRefs.stdout);
    if (match != null) return 'origin/${match.group(1)}';
  }

  // Check common branches
  for (final candidate in ['origin/main', 'origin/staging', 'origin/master']) {
    final check = await _runGit(['rev-parse', '--verify', candidate], cwd: cwd);
    if (check.code == 0) return candidate;
  }

  return null;
}