in modules/core/src/main/scala/org/scalasteward/core/git/FileGitAlg.scala [80:112]
override def containsChanges(repo: File): F[Boolean] =
git_("status", "--porcelain", "--untracked-files=no", "--ignore-submodules")(repo)
.map(_.nonEmpty)
override def createBranch(repo: File, branch: Branch): F[Unit] =
git_("checkout", "-b", branch.name)(repo).void
override def currentBranch(repo: File): F[Branch] =
git("rev-parse", "--abbrev-ref", Branch.head.name)(repo)
.map(lines => Branch(lines.mkString.trim))
override def deleteLocalBranch(repo: File, branch: Branch): F[Unit] =
git_("branch", "--delete", "--force", branch.name)(repo).void
override def deleteRemoteBranch(repo: File, branch: Branch): F[Unit] =
git_("push", "origin", "--delete", branch.name)(repo).void
override def discardChanges(repo: File): F[Unit] =
git_("checkout", "--", ".")(repo).void
override def findFilesContaining(repo: File, string: String): F[List[String]] =
git("grep", "-I", "--fixed-strings", "--files-with-matches", string)(repo)
.handleError(_ => List.empty[String])
.map(_.filter(_.nonEmpty))
override def hasConflicts(repo: File, branch: Branch, base: Branch): F[Boolean] = {
val tryMerge = git_("merge", "--no-commit", "--no-ff", branch.name)(repo)
val abortMerge = git_("merge", "--abort")(repo).attempt.void
returnToCurrentBranch(repo) {
checkoutBranch(repo, base) >> F.guarantee(tryMerge, abortMerge).attempt.map(_.isLeft)
}
}