1 puntos por GN⁺ 5 시간 전 | 1 comentarios | Compartir por WhatsApp
  • jj v0.43.0, el sistema de control de versiones compatible con Git, agrega jj run para ejecutar comandos sobre varios conjuntos de cambios y así automatizar mejor tareas repetitivas de verificación y corrección
  • jj run usa una copia de trabajo dedicada para cada conjunto de cambios, y también propaga los cambios y conflictos de comandos que modifican la copia de trabajo, como cargo check o cargo fix
  • Esta versión incluye cambios que afectan la configuración existente y la forma de usar revsets, como git_head(), git_refs(), la resolución de símbolos al estilo Git y la eliminación de ui.revsets-use-glob-by-default
  • También se agregan jj show --reversed, la búsqueda de configuración en /etc/jj, jj config gc, jj gerrit upload -o, la función revset forks() y el estilo de color con texto tachado
  • Se corrigen problemas con el manejo de identidad de archivos en Windows, snapshots de copias de trabajo inmutables, advertencias por URL remotas duplicadas y corrupción de objetos Git loose en Intel Raptor Lake y aarch64

Resumen de la versión

  • jj es un sistema de control de versiones compatible con Git, simple pero potente
  • En la v0.43.0 se agrega jj run, que permite aplicar comandos a varios conjuntos de cambios
  • Las instrucciones de instalación para comenzar están disponibles en installation instructions

Ejecutar comandos por conjunto de cambios: jj run

  • jj run permite ejecutar el mismo comando sobre varios conjuntos de cambios
  • Cada conjunto de cambios usa una copia de trabajo dedicada y aislada
  • El comando ejecutado puede actualizar la copia de trabajo, y los cambios y conflictos resultantes se propagan de forma adecuada
  • Ejemplos de uso:
    • jj run -- cargo check --all-features
    • jj run -- cargo fix

Eliminaciones que afectan la compatibilidad

  • Se eliminan las funciones git_head() y git_refs(), que ya estaban en desuso en revsets y templates
  • Los símbolos al estilo Git como refs/heads/main ya no se interpretan como revisiones
    • En su lugar, se debe usar la sintaxis <name> o <name>@<remote> para bookmark/tag
  • También desaparece la opción obsoleta ui.revsets-use-glob-by-default
  • jj bookmark track y untrack ya no admiten el patrón <kind>:<bookmark>@<remote>
    • La sintaxis simbólica <bookmark>@<remote> sigue siendo compatible
    • Issue relacionado: #9226

Nuevas funciones

  • jj show ahora admite la bandera --reversed
  • jj también busca archivos de configuración en /etc/jj
  • jj config gc limpia configuraciones de repositorios eliminados o movidos en la carpeta ~/.config/jj/repos
    • Issue relacionado: #9362
  • jj gerrit upload ahora admite las banderas -o / --option, que funcionan como git push -o o --push-option
  • jj git fetch hace rebase de revisiones descendientes de revisiones reescritas según su change ID
    • Antes, cuando había varias revisiones con bookmarks dentro de una pila, la revisión reescrita y sus descendientes no siempre se rebasaban
    • Las revisiones descendientes inmutables no se rebasan
  • Se agrega la función revset forks()
    • Devuelve todos los commits que tienen 2 o más hijos
  • La configuración colors ahora admite el estilo de texto tachado con { crossed-out = true }

Problemas corregidos

  • En Windows, al consultar la identidad de archivo de una ruta, ya no se siguen enlaces simbólicos
    • Esto alinea el comportamiento con Unix
    • Antes, dos enlaces simbólicos que apuntaban al mismo destino se trataban como si fueran el mismo archivo
    • Esta verificación de identidad se usa para detectar alias de los directorios reservados .git y .jj al escribir la copia de trabajo
    • Issue relacionado: #8924
  • Cuando la copia de trabajo estaba en estado inmutable, jj ahora crea una nueva revisión de working-copy durante el snapshot
    • Antes, la nueva revisión se creaba justo después de que la copia de trabajo se volvía inmutable
    • Issues relacionados: #7751, #9338
  • jj git remote add ahora muestra una advertencia si la URL de fetch o la effective push URL del remote nuevo coincide exactamente con la de un remote existente
    • Issue relacionado: #413
  • Se corrige el problema de objetos Git loose corruptos en CPU Intel Raptor Lake y en aarch64
    • Antes, jj podía informar que el commit se había realizado con éxito, pero luego git fsck podía fallar con incorrect data check, corrupt loose object o missing blob
    • Después, otras operaciones de jj también podían fallar con corrupt deflate stream

1 comentarios

 
GN⁺ 5 시간 전
Opiniones en Lobste.rs
  • Me entusiasma mucho jj run

  • Me alegra que se haya revertido la deprecación de jj bookmark track/untrack <name>@<remote>
    Tener que escribir --remote cada vez siempre me pareció incómodo

  • La parte donde corrigieron objetos loose de Git corruptos en Intel Raptor Lake CPU y aarch64 suena como un bug interesante
    Me gustaría leer una entrada de blog al respecto si sale 😃

  • Hasta ahora pensaba que todos los objetos de Git corruptos que había visto se debían a rollbacks del sistema de archivos
    Después de un apagado forzado, los rollbacks de f2fs solían dejar el disco en estados bastante interesantes, así que es muy interesante enterarme de que simplemente había algo roto por ese lado

  • Me pregunto en qué se diferencia jj run de jj fix
    En el ejemplo del changelog también usaban jj run para ejecutar cargo fix, así que definitivamente parecen solaparse

    • jj run crea una copia de trabajo completa y ejecuta el comando dentro de ella
      jj fix pasa por pipe el contenido de un solo archivo a un comando y toma la salida como el nuevo contenido de ese archivo
      Si la herramienta encaja bien con jj fix, como suele pasar con formateadores o linters, es mucho más rápido, pero jj run es más flexible
    • Según entiendo, run ejecuta un comando por cada cambio, y fix aplica un filtro a cada archivo modificado
      En mi caso, sería algo como correr la suite de pruebas con run para verificar que cada commit sea válido, y luego usar fix para pasar un formateador sobre los archivos
      Todavía no actualicé, así que esto es solo mi interpretación
  • Voy a probar un poco jj run, pero por la forma en que uso direnv, creo que probablemente se vuelva más complicado de lo necesario