5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-15 04:51:43 +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
end
def remote
@remote ||= rugged.remotes.first
# Obtiene la rama por defecto a partir de la referencia actual
#
# 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
# 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
# repositorios remotos.
def fetch
if remote.check_connection :fetch
@changes = rugged.fetch(remote)[:received_objects]
if origin.check_connection :fetch
@changes = rugged.fetch(origin)[:received_objects]
else
0
end
@ -34,7 +52,7 @@ class Site
# Incorpora los cambios en el repositorio actual
#
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
begin
@ -46,7 +64,7 @@ class Site
commit = Rugged::Commit
.create(rugged, update_ref: 'HEAD',
parents: [master, origin_master],
parents: [head_commit, remote_head_commit],
tree: merge.write_tree(rugged),
message: I18n.t('sites.fetch.merge.message'),
author: author(usuarie), committer: committer)
@ -57,12 +75,20 @@ class Site
commit
end
def master
rugged.branches['master'].target
# El último commit
#
# @return [Rugged::Commit]
def head_commit
rugged.branches[default_branch].target
end
def origin_master
rugged.branches['origin/master'].target
# El último commit del repositorio remoto
#
# XXX: Realmente no recuerdo por qué esto era necesario ~f
#
# @return [Rugged::Commit]
def remote_head_commit
rugged.branches["origin/#{default_branch}"].target
end
# 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
# están en la rama master local
#
# XXX: monitorear esto por performance
walker.push 'refs/remotes/origin/master'
walker.hide 'refs/heads/master'
walker.push "refs/remotes/origin/#{default_branch}"
walker.hide "refs/heads/#{default_branch}"
walker.each.to_a
end

View file

@ -18,6 +18,28 @@ class RepositoryTest < ActiveSupport::TestCase
@site.destroy
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
assert @site.repository.fetch.is_a?(Integer)
end
@ -28,8 +50,7 @@ class RepositoryTest < ActiveSupport::TestCase
assert @site.repository.commits.empty?
assert_equal @usuarie.name,
@site.repository.rugged
.branches['master'].target.author[:name]
@site.repository.rugged.branches[@site.repository.default_branch].target.author[:name]
Dir.chdir(@site.path) do
FileUtils.rm 'migration.csv'