safa-resolve-ref

1 view
Skip to first unread message

Dario Rodriguez

unread,
Dec 19, 2011, 8:00:02 AM12/19/11
to safa-developers
#!/usr/bin/env bash # file: safa-resolve-ref # -------------------------------------------------------------- # This file is part of SAFA # # SAFA is free software: you can redistribute it and/or modify # it under the terms of the version 3 of the GNU General Public # License as published by the Free Software Foundation # # SAFA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with SAFA. If not, see <http://www.gnu.org/licenses/>. . safa-shelllib if test $# -lt 1 || test $# -gt 2; then echo "incorrect usage" die "usage: safa-resolve-ref <ref>" else # first of all, if it's a commit... if test -f ".safa/commits/$1" then echo "$1" elif test -f ".safa/branches/$1" then # recursive, until it reaches a commit safa-resolve-ref $(cat .safa/branches/$1) exit $? fi elif test -f ".safa/refs/$1" then # recursive, until it reaches a commit safa-resolve-ref $(cat .safa/refs/$1) exit $? else die "ref is invalid: $1" fi fi

Es un borrador, aunque supongo que así funcionaría. La idea del comando es que podamos usar nombres de branches o refs como si fueran commits, por ejemplo:

$ safa-check-from-commit $(safa-resolve-ref HEAD)

Que siempre resolverá la referencia de HEAD, que apunta al último commit del branch.

Esto es un paso hacia el soporte de múltiples ramas =)

Saludos
--
Dario

Nicolas Palumbo

unread,
Dec 19, 2011, 8:12:35 AM12/19/11
to safa-de...@googlegroups.com
cual seria la diferencia entre branches y refs aca?
Entiendo en los versionadores clasicos, los refs serian como los tags.
pero aca no me queda claro la diferencia entre uno y otro

> --
> --------------------
> Recibes esto porque estas suscrito a "safa-dcs" en GoogleGroups.
> Puedes enviar correo a: safa...@googlegroups.com
> Para desuscribirte, envia un correo a: safa-dcs+u...@googlegroups.com
> Mas info: http://groups.google.com/group/safa-dcs
> S.A.F.A. - More than just version controlling

Dario Rodriguez

unread,
Dec 19, 2011, 8:40:32 AM12/19/11
to safa-de...@googlegroups.com
On Mon, Dec 19, 2011 at 10:12 AM, Nicolas Palumbo <napa...@gmail.com> wrote:
cual seria la diferencia entre branches y refs aca?
Entiendo en los versionadores clasicos, los refs serian como los tags.
pero aca no me queda claro la diferencia entre uno y otro

 Los branches son un tipo de referencia, pero el simple hecho de estar en "branches" los transforma en cabezas de las ramas. Así:

* (A)      * (C,HEAD)
|          |
*   * (B)  *
|   |      |
*   *------´
 \ /
  *
  |
  *


Siendo los asteriscos los commits, el branch A estaría apuntado por branches/A, el branch B, por branches/B, y el branch C, por branches/C y por HEAD. Estar apuntado por HEAD significa que es el commit sobre el que estamos trabajando.

Cuando safa-rev-log quiere leer todas las ramas, simplemente verifica las referencias existentes en branches/, y con referencias me refiero a archivos que simplemente tienen un nombre dentro.

Los TAGS no son referencias solamente, son objetos más completos. Contienen una referencia al commit al que pertenecen, pero también tienen comentarios, pueden tener firmas criptográficas para validar el commit, etcétera. Son una pequeña pieza de información que etiqueta a un commit y se leen de forma diferente al resto de las referencias, que normalmente serán archivos de una sola línea. Pero sin importar si es un tag, un ref simple como HEAD, o un branch, cualquier referencia es abstraída como tal por safa-resolve-ref.

Saludos
--
Dario
Reply all
Reply to author
Forward
0 new messages