Proyektil dengan caching tidak suka file baru

9

Saya menggunakan proyektil untuk penelusuran proyek saya. Saya telah melihat bahwa ini sangat lambat, jadi saya menyalakan caching. Sekarang cepat (tidak terlalu cepat, sedih).

Jika saya membuat file baru di luar emacs sendiri, proyektil tidak menemukannya. Saya dapat menjalankan pembatalan cache tetapi itu membutuhkan waktu beberapa menit. Bagaimana cara memperbaikinya?

lukas.pukenis
sumber
Anda dapat membuka file dan menambahkannya secara manual ke cache M-x projectile-cache-current-file. Jika Anda tidak ingin maka Emacs harus melintasi seluruh pohon mencari file, jadi tidak ada optimasi yang dapat dilakukan.
PythonNut
1
Saya sarankan membuka permintaan fitur untuk mendukung filenotify.elperpustakaan built-in , yang saya percaya akan memungkinkan proyektil untuk melacak perubahan direktori dan akibatnya diberitahu ketika file baru (atau direktori untuk pelacakan) dibuat (atau dihapus) sehingga secara otomatis dapat menambahkan (atau menghapus) file ke / dari cache. Pemberitahuan direktori tidak bersifat rekursif, sehingga fitur ini akan memerlukan pelacakan secara mandiri setiap direktori dalam proyek. Saya tidak tahu apakah itu akan dikenakan hukuman nyata untuk pohon proyek besar.
phils

Jawaban:

4

Gunakan argumen awalan, yaitu C-u C-c p funtuk dengan cepat membatalkan dan menemukan file dalam proyek. Saran dalam komentar tentang penggunaan projectile-cache-current-filesecara teknis benar, tetapi ada kait pada find-fileyang secara otomatis memanggil ini pada setiap file baru yang dibuka. Itu akan menjadi solusi tercepat tanpa membatalkan cache yang ada.

Namun, sepertinya masalah sebenarnya adalah butuh waktu terlalu lama untuk membangun kembali cache dengan melintasi pohon. Untuk ini, akan membantu jika ada sedikit lebih banyak informasi tentang lingkungan Anda. Secara default projectile-indexing-methoddiatur ke 'nativepada windows, yang lebih memilih implementasi elisp findkarena lebih portabel. Kalau tidak, ia menggunakan 'alienmetode, yaitu git ls, finddll. Jika Anda berada di linux metode alien diaktifkan secara default.

Kalau tidak, Anda mungkin ingin mengejar lubang kelinci projectile-get-repo-filesdan projectile-get-ext-command. Mereka menentukan di mana proyektil mencari daftar file. Mungkin saja Anda dapat menimpanya dengan dir-local atau sejenisnya untuk memaksa metode pencarian yang lebih cepat.

dgtized
sumber
2

Ini tidak mempercepat cache file tetapi menyimpan langkah manual karena harus membatalkan cache basi (yang tidak mengandung file baru).

Proyektil secara otomatis membatalkan cache jika /your/projectile/project/root/.projectilefile lebih baru dari file cache proyek.

Pemeriksaan ini dilakukan setiap kali Anda mencoba mencari file di proyek menggunakan proyektil; projectile-find-fileatau C-c p fjika salah satu perintah yang melakukan ini, periksa dulu.

(defun projectile-maybe-invalidate-cache (force)
  "Invalidate if FORCE or project's dirconfig newer than cache."
  (when (or force (file-newer-than-file-p (projectile-dirconfig-file)
                                           projectile-cache-file))
    (projectile-invalidate-cache nil)))

- Dari projectile.elsumber - baris 575-579

Jadi solusi adalah untuk touchyang .projectileberkas ketika Anda memperbarui proyek. Sebagai contoh, Anda dapat aliasdengan git commit, git pull, dll untuk melakukan

touch /your/projectile/project/root/.projectile` 

setelah melakukan apa pun yang Anda lakukan dengan gitperintah.

Jadi, jika seseorang dalam tim Anda menambahkan file baru ke proyek dan (dengan asumsi Anda menggunakan kontrol git untuk versi), Anda menggunakan tarikan git alias khusus Anda, cache akan dibatalkan secara otomatis ketika Anda melakukannya projectile-find-filedi waktu berikutnya.

Kaushal Modi
sumber