git branch --merged ‹sha› через привязки Rugged libgit2?

Есть ли способ получить ту же информацию, что и собственная команда git

git branch --merged <sha>

через привязки Rugged libgit2 для Ruby?


person cschol    schedule 07.11.2014    source источник


Ответы (1)


Что делает этот коммит 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 на любой идентификатор, с которым хотите сравнить.

person Carlos Martín Nieto    schedule 08.11.2014