Korupsi repositori Mercurial

14

Ini agak terkait dengan pertanyaan ini tetapi merupakan pertanyaan yang berbeda.

Kami memiliki repositori Hg pusat, yang dilayani untuk pengguna melalui SSH dan server-mercurial . Kami memiliki sejumlah klien Mac, Linux dan Windows yang terhubung dengannya.

Ini telah terjadi dua kali sekarang bahwa salah satu pengguna Windows telah merusak repositori mereka, kemudian mendorong kembali ke yang sentral merusaknya. Saya ingin menulis skrip kait yang masuk pada repositori pusat untuk mencegah transaksi diterima jika akan merusak repo pusat.

Meskipun sayangnya saya tidak cukup tahu tentang Mercurial untuk menulis naskah seperti itu. Adakah kemungkinan orang lain menemukan ini? Secara pribadi saya tidak begitu yakin mengapa hg tidak melakukan ini secara default.

bobinabottle
sumber
Saya telah menemukan solusi di sini: davidherron.com/blog/topics/… yang perlu dilakukan pada semua klien. Tetapi jika ada yang punya solusi yang lebih baik yang bisa dilakukan untuk repo sentral itu sendiri akan lebih baik.
bobinabottle,
Tolong beri kami detail lebih lanjut: versi Mercurial apa yang Anda gunakan di server dan pada masing-masing klien?
Martin Geisler
2
Juga, akan sangat berguna bagi kami (pengembang Mercurial) jika Anda dapat mereproduksi ini. Silakan juga melaporkan masalah seperti itu kepada kami secara langsung melalui milis kami: mercurial.selenic.com/wiki/MailingLists atau pelacak bug: selenic.com/mercurial/bts Itu jauh lebih produktif daripada memposting di sini :-)
Martin Geisler

Jawaban:

4

Versi terbaru dari Mercurial (sejak 1.5) mendukung validasi data yang masuk. Menambahkan

[server]
validate = True

ke konfigurasi hg server Anda (baik .hg/hgrcatau konfigurasi hgwebdir akan berfungsi dengan baik) agar server memverifikasi data yang masuk dan menolak dorongan yang tidak valid. Klien kemudian akan melihat kesalahan yang mirip dengan:

remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify

Semoga itu bisa membantu!

durin42
sumber
2

Mungkin Anda harus menghindari mendorong repositori sama sekali. Dengan Mercurial dan sifatnya yang terdistribusi, setiap orang dapat memiliki cabang mereka, dan ketika mereka merasa siap, mereka memberi tahu Anda dan Anda menarik dari mereka. Tidak ada masalah akses komit, tidak ada dorongan yang akan merusak barang ...

Setidaknya ini saran yang diberikan teman saya, ketika saya pindah dari SVN ke Mercurial.

Saya tidak tahu, apakah ini pilihan bagi Anda, tetapi menyiapkan repositori pribadi untuk semua orang dan kemudian menarik orang-orang yang Anda butuhkan mungkin memerlukan lebih sedikit pekerjaan, daripada mencoba menangkap dorongan berbahaya.

AdamTheCamper
sumber
Tidak mendorong ke HG mengalahkan seluruh tujuannya - banyak pengguna bekerja bersama
Anonymouse
0

Tidak bisakah Anda melakukan hal yang sama dengan Blog David Herron , tetapi alih-alih melakukannya saat prerouting, lakukan pada kait prekomentar pada repo pusat?

Ryan Gibbons
sumber
Tidak :-( Saya sudah mencobanya tetapi berakhir di jalan buntu. Ketika klien mencoba mendorongnya cadangan kunci di repositori. Menjalankan 'hg memverifikasi' juga memerlukan kunci, sehingga akhirnya hanya menunggu selamanya di loop tak berujung.
bobinabottle
Juga, bahkan jika ini bekerja pada precommit, itu akan memverifikasi repositori, lihat apakah itu ok, lalu komit perubahan yang akan merusaknya. Benar-benar saya akan memerlukan pengait untuk menilai apakah perubahan yang masuk akan merusak repo, jika demikian gulung balik transaksi. Jadi akan lebih masuk akal jika berada di hook changegroup.
bobinabottle
(Menggunakan hook changegroup masih menghasilkan deadlock)
bobinabottle
Menarik - kaitnya tampaknya berbasis python. Apakah Anda tahu apa yang merusak repositori? Apakah hal yang sama setiap kali?
Ryan Gibbons
0

Salah satu alternatif yang mungkin adalah:

  1. Mengkloning repositori SETELAH push.
  2. Verifikasi itu.
  3. Jika respositori baik, arsipkan sebagai yang terbaru baik
  4. Jika tempat penyimpanan rusak, angkat alarm
  5. Pada alarm, kembalikan tempat penyimpanan barang terakhir yang dikenal dengan baik.

Solusi ini bukan yang Anda butuhkan, tetapi setidaknya, Anda mendapatkan cara untuk mengembalikan repositori Anda jika terjadi korupsi.

Laurent Etiemble
sumber