1 poin oleh GN⁺ 5 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Sistem kontrol versi kompatibel Git jj v0.43.0 menambahkan jj run, yang memungkinkan menjalankan perintah pada beberapa changeset sehingga pekerjaan verifikasi dan perbaikan berulang bisa diotomatisasi lebih jauh
  • jj run menggunakan working copy khusus untuk tiap changeset, serta turut menyebarkan perubahan dan konflik dari perintah yang memodifikasi working copy seperti cargo check atau cargo fix
  • Rilis ini mencakup perubahan yang memengaruhi pengaturan lama dan cara penggunaan revset yang sudah ada, seperti git_head(), git_refs(), resolusi simbol bergaya Git, serta penghapusan ui.revsets-use-glob-by-default
  • jj show --reversed, pencarian konfigurasi /etc/jj, jj config gc, jj gerrit upload -o, fungsi revset forks(), dan gaya warna coret juga ditambahkan
  • Perbaikan mencakup penanganan file identity di Windows, snapshot working copy immutable, peringatan URL remote duplikat, serta masalah kerusakan loose Git object pada Intel Raptor Lake dan aarch64

Ikhtisar rilis

  • jj adalah sistem kontrol versi kompatibel Git yang sederhana namun kuat
  • Pada v0.43.0, jj run baru ditambahkan untuk menerapkan perintah ke beberapa changeset
  • Panduan instalasi untuk memulai dapat dilihat di installation instructions

Menjalankan perintah per changeset: jj run

  • jj run dapat menjalankan perintah yang sama pada beberapa changeset
  • Setiap changeset menggunakan working copy khusus yang terpisah satu sama lain
  • Perintah yang dijalankan dapat memperbarui working copy, dan perubahan serta konflik yang dihasilkan akan disebarkan dengan semestinya
  • Contoh penggunaan:
    • jj run -- cargo check --all-features
    • jj run -- cargo fix

Penghapusan yang memengaruhi kompatibilitas

  • Fungsi git_head() dan git_refs() yang sudah usang kini dihapus dari revset dan template
  • Simbol bergaya Git seperti refs/heads/main tidak lagi diinterpretasikan sebagai revisi
    • Sebagai gantinya, gunakan sintaks <name> atau <name>@<remote> untuk bookmark/tag
  • Opsi ui.revsets-use-glob-by-default yang sudah usang juga telah dihapus
  • jj bookmark track dan untrack tidak lagi mendukung pola <kind>:<bookmark>@<remote>
    • Sintaks simbol <bookmark>@<remote> tetap didukung
    • Isu terkait: #9226

Fitur baru

  • jj show kini mendukung flag --reversed
  • jj kini juga mencari file konfigurasi di /etc/jj
  • jj config gc membersihkan konfigurasi repositori yang telah dihapus atau dipindahkan dari folder ~/.config/jj/repos
  • jj gerrit upload kini mendukung flag -o / --option, mirip dengan git push -o atau --push-option
  • jj git fetch me-rebase revisi turunan dari revisi yang ditulis ulang berdasarkan change ID
    • Sebelumnya, ketika ada beberapa revisi dalam stack yang memiliki bookmark, revisi yang ditulis ulang dan revisi turunannya tidak selalu di-rebase
    • Revisi turunan immutable tidak akan di-rebase
  • Fungsi revset forks() ditambahkan
    • Mengembalikan semua commit yang memiliki 2 anak atau lebih
  • Pengaturan colors kini mendukung gaya teks coret dengan { crossed-out = true }

Masalah yang diperbaiki

  • Di Windows, saat mengambil file identity dari path, symbolic link kini tidak lagi diikuti
    • Diselaraskan dengan perilaku Unix
    • Sebelumnya, dua symbolic link yang menunjuk ke target yang sama diperlakukan sebagai file yang sama
    • Pemeriksaan identity ini digunakan untuk mendeteksi alias dari direktori .git dan .jj yang dicadangkan saat menulis working copy
    • Isu terkait: #8924
  • Saat working copy berada dalam keadaan immutable, jj kini membuat revisi working-copy baru selama proses snapshot
    • Sebelumnya, revisi baru dibuat segera setelah working copy menjadi immutable
    • Isu terkait: #7751, #9338
  • jj git remote add kini memberi peringatan jika fetch URL atau effective push URL dari remote baru persis sama dengan remote yang sudah ada
  • Masalah loose Git object yang rusak pada CPU Intel Raptor Lake dan aarch64 telah diperbaiki
    • Sebelumnya, jj bisa melaporkan commit berhasil, tetapi git fsck kemudian dapat gagal dengan incorrect data check, corrupt loose object, atau missing blob
    • Operasi jj setelahnya juga bisa gagal dengan corrupt deflate stream

1 komentar

 
GN⁺ 5 jam lalu
Komentar di Lobste.rs
  • Sangat menantikan jj run

  • Senang karena penghentian dukungan dibatalkan untuk jj bookmark track/untrack <name>@<remote>
    Selalu terasa kurang enak harus mengetik --remote setiap kali

  • Bagian tentang perbaikan objek loose Git yang rusak pada Intel Raptor Lake CPU dan aarch64 terdengar seperti bug yang menarik
    Kalau ada tulisan blog terkait, saya ingin membacanya 😃

  • Sampai sekarang saya mengira semua objek Git rusak yang pernah saya lihat disebabkan oleh rollback filesystem
    Setelah hard shutdown, rollback f2fs sering menghasilkan kondisi disk yang cukup menarik, jadi sangat menarik mengetahui bahwa memang ada bagian yang rusak di sisi itu

  • Penasaran bagaimana jj run berbeda dari jj fix
    Di contoh changelog juga jj run dipakai untuk menjalankan cargo fix, jadi keduanya jelas terlihat tumpang tindih

    • jj run membuat seluruh working copy lalu menjalankan perintah di dalamnya
      jj fix mem-pipe isi satu file ke sebuah perintah, lalu menjadikan output-nya sebagai isi baru file tersebut
      Jika sebuah tool cocok dengan jj fix, biasanya seperti formatter atau linter, itu jauh lebih cepat, tetapi jj run lebih fleksibel
    • Sejauh yang saya pahami, run menjalankan perintah untuk tiap perubahan, sedangkan fix menjalankan filter pada tiap file yang berubah
      Dalam kasus saya, saya akan memakai run untuk menjalankan test suite guna memastikan tiap commit valid, lalu memakai fix untuk menjalankan formatter pada file
      Saya belum memperbarui, jadi ini hanya interpretasi saya
  • Saya mungkin akan sedikit mencoba jj run, tetapi karena cara saya memakai direnv, besar kemungkinan ini akan jadi lebih merepotkan dari yang diperlukan