canPush method
Implementation
Future<bool> canPush() async {
if (config.remotes.isEmpty) {
return false;
}
var head = await this.head();
if (head == null || head.isHash) {
return false;
}
var brConfig = config.branch(head.target!.branchName()!);
var brConfigMerge = brConfig?.merge;
var brConfigRemote = brConfig?.remote;
if (brConfig == null || brConfigMerge == null || brConfigRemote == null) {
// FIXME: Maybe we can push other branches!
return false;
}
var resolvedHead = await resolveReference(head);
if (resolvedHead == null) {
return false;
}
// Construct remote's branch
var remoteBranchName = brConfigMerge.branchName()!;
var remoteRefName = ReferenceName.remote(brConfigRemote, remoteBranchName);
var remoteRef = await resolveReferenceName(remoteRefName);
if (remoteRef == null) {
return false;
}
return resolvedHead.hash != remoteRef.hash;
}