5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-15 06:31:44 +00:00

no asumir que la rama principal se llama master

la estábamos hardcodeando, este cambio permite descubrir el nombre de la
rama actual.

el efecto secundario es que podemos abrir ramas manualmente en el
repositorio (desde terminal) y sutty va a respetar eso (no sé por qué lo
haríamos, pero está la posibilidad).
This commit is contained in:
f 2021-04-16 10:27:37 -03:00
parent 1d6cf11d52
commit 70f5d4f001
2 changed files with 61 additions and 16 deletions

View file

@ -14,8 +14,26 @@ class Site
@changes = 0 @changes = 0
end end
def remote # Obtiene la rama por defecto a partir de la referencia actual
@remote ||= rugged.remotes.first #
# Por ejemplo "refs/heads/no-master" => "no-master"
#
# XXX: No memoizamos para obtener siempre el nombre de la rama
# actual, aunque por ahora asumimos que siempre estamos en la misma,
# internamente (ej. vía shell) podríamos cambiarla.
#
# @return [String]
def default_branch
rugged.head.canonical_name.split('/', 3).last
end
# Obtiene el origin
#
# @return [Rugged::Remote]
def origin
@origin ||= rugged.remotes.find do |remote|
remote.name == 'origin'
end
end end
# Trae los cambios del repositorio de origen sin aplicarlos y # Trae los cambios del repositorio de origen sin aplicarlos y
@ -24,8 +42,8 @@ class Site
# XXX: Prestar atención a la velocidad de respuesta cuando tengamos # XXX: Prestar atención a la velocidad de respuesta cuando tengamos
# repositorios remotos. # repositorios remotos.
def fetch def fetch
if remote.check_connection :fetch if origin.check_connection :fetch
@changes = rugged.fetch(remote)[:received_objects] @changes = rugged.fetch(origin)[:received_objects]
else else
0 0
end end
@ -34,7 +52,7 @@ class Site
# Incorpora los cambios en el repositorio actual # Incorpora los cambios en el repositorio actual
# #
def merge(usuarie) def merge(usuarie)
merge = rugged.merge_commits(master, origin_master) merge = rugged.merge_commits(head_commit, remote_head_commit)
# No hacemos nada si hay conflictos, pero notificarnos # No hacemos nada si hay conflictos, pero notificarnos
begin begin
@ -46,7 +64,7 @@ class Site
commit = Rugged::Commit commit = Rugged::Commit
.create(rugged, update_ref: 'HEAD', .create(rugged, update_ref: 'HEAD',
parents: [master, origin_master], parents: [head_commit, remote_head_commit],
tree: merge.write_tree(rugged), tree: merge.write_tree(rugged),
message: I18n.t('sites.fetch.merge.message'), message: I18n.t('sites.fetch.merge.message'),
author: author(usuarie), committer: committer) author: author(usuarie), committer: committer)
@ -57,12 +75,20 @@ class Site
commit commit
end end
def master # El último commit
rugged.branches['master'].target #
# @return [Rugged::Commit]
def head_commit
rugged.branches[default_branch].target
end end
def origin_master # El último commit del repositorio remoto
rugged.branches['origin/master'].target #
# XXX: Realmente no recuerdo por qué esto era necesario ~f
#
# @return [Rugged::Commit]
def remote_head_commit
rugged.branches["origin/#{default_branch}"].target
end end
# Compara los commits entre el repositorio remoto y el actual para # Compara los commits entre el repositorio remoto y el actual para
@ -72,10 +98,8 @@ class Site
# Obtenemos todos los commits que existen en origin/master que no # Obtenemos todos los commits que existen en origin/master que no
# están en la rama master local # están en la rama master local
# walker.push "refs/remotes/origin/#{default_branch}"
# XXX: monitorear esto por performance walker.hide "refs/heads/#{default_branch}"
walker.push 'refs/remotes/origin/master'
walker.hide 'refs/heads/master'
walker.each.to_a walker.each.to_a
end end

View file

@ -18,6 +18,28 @@ class RepositoryTest < ActiveSupport::TestCase
@site.destroy @site.destroy
end end
test 'se puede obtener la rama por defecto' do
assert_equal 'master', @site.repository.default_branch
random_branch = SecureRandom.hex
Dir.chdir(@site.path) do
`git checkout -b #{random_branch} >/dev/null 2>&1`
end
assert_equal random_branch, @site.repository.default_branch
end
test 'los nombres de las ramas pueden tener /' do
random_branch = ([SecureRandom.hex] * 2).join('/')
Dir.chdir(@site.path) do
`git checkout -b #{random_branch} >/dev/null 2>&1`
end
assert_equal random_branch, @site.repository.default_branch
end
test 'se pueden traer cambios' do test 'se pueden traer cambios' do
assert @site.repository.fetch.is_a?(Integer) assert @site.repository.fetch.is_a?(Integer)
end end
@ -28,8 +50,7 @@ class RepositoryTest < ActiveSupport::TestCase
assert @site.repository.commits.empty? assert @site.repository.commits.empty?
assert_equal @usuarie.name, assert_equal @usuarie.name,
@site.repository.rugged @site.repository.rugged.branches[@site.repository.default_branch].target.author[:name]
.branches['master'].target.author[:name]
Dir.chdir(@site.path) do Dir.chdir(@site.path) do
FileUtils.rm 'migration.csv' FileUtils.rm 'migration.csv'