Есть ли способ получить ту же информацию, что и собственная команда git
git branch --merged <sha>
через привязки Rugged libgit2 для Ruby?
Есть ли способ получить ту же информацию, что и собственная команда git
git branch --merged <sha>
через привязки Rugged libgit2 для Ruby?
Что делает этот коммит git, так это просматривает каждую ветку и проверяет, соответствует ли база слияния между веткой и указанной вами фиксацией (или HEAD, если нет) базе ветки.
Если они совпадают, они объединяются; если они этого не делают, это не так. Вы можете сделать этот цикл в рубине довольно легко
repo.branches.each(:local) # look only at local branches
.map { |b|
tgt = b.resolve.target # look at what the branch is pointing to
# and check if the target commit is included in the history of HEAD
merged = repo.merge_base(repo.head.target, tgt) == tgt.oid
[b.name, merged]
} # this will give a list with the name and whether the branch is merged
.keep_if { |name, merged| merged } # keep only the ones which are merged
.map(&:first) # get the name
Вы могли бы иметь merged_list << b.name if merged
в первом блоке и сделать его зависшим от each
, но мне нравится составлять потоки данных.
Вы также можете изменить, использовать ли :local
, :remote
или оба для ветвей в зависимости от ваших потребностей. И вы также можете изменить repo.head.target
на любой идентификатор, с которым хотите сравнить.