resolveRemote method

  1. @override
Future resolveRemote()
override

By default, a generic PubEntry does not fetch a resolved URL.

Implementation

@override
Future resolveRemote() async {
  final repoUrl = description?.url;
  if (repoUrl == null) {
    print('Error: Git repository URL is not available for package $name.');
    return;
  }

  try {
    // Execute 'git ls-remote <repository_url> HEAD'
    final result = await Process.run('git', ['ls-remote', repoUrl, 'HEAD']);

    if (result.exitCode == 0) {
      final output = result.stdout.toString().trim();
      // Expected output format: <commit_hash>\tHEAD
      if (output.isNotEmpty && output.contains('\t')) {
        _gitRevision = output.split('\t').first;
        return;
      } else {
        print('Error: Could not parse HEAD revision for $repoUrl: "$output"');
      }
    } else {
      print('Error running git ls-remote for :');
      print('$repoUrl (exit code ${result.exitCode}): ${result.stderr}');
    }
  } catch (e) {
    print(
        'Exception while trying to get remote HEAD revision for $repoUrl: $e');
    return;
  }
}