Önbellekli mermi yeni dosyaları sevmez


9

Proje taraması için mermi kullanıyorum. Gerçekten yavaş olduğunu gördüm, bu yüzden önbelleğe aldım. Şimdi hızlı (ne yazık ki çok hızlı değil).

Emacs'ın dışında yeni bir dosya oluşturursam, mermi dosyayı bulamaz. Önbellek geçersiz kılmayı çalıştırabilirim, ancak bu birkaç dakika sürer. Bunu nasıl düzeltirim?


Dosyayı açabilir ve ile önbelleğe manuel olarak ekleyebilirsiniz M-x projectile-cache-current-file. Eğer istemiyorsanız, Emacs dosya aramak için tüm ağacın üzerinden geçmelidir , böylece hiçbir optimizasyon yapılamaz.
PythonNut

1
Yerleşik filenotify.elkitaplığı desteklemek için merminin dizin değişikliklerini izlemesine izin vereceğine ve sonuç olarak otomatik olarak ekleyebilmesi için yeni bir dosya (veya izleme dizini) oluşturulduğunda (veya silindiğinde) bilgilendirileceğine inandığım bir özellik isteği açmanızı öneririm. (veya önbellekten / önbellekteki dosyaları kaldır) Dizin bildirimleri özyinelemeli değildir, bu nedenle bu özellik projedeki her dizinin bağımsız olarak izlenmesini gerektirir. Bunun büyük bir proje ağacı için gözle görülür bir cezaya neden olup olmayacağını bilmiyorum.
phils

Yanıtlar:


4

Önek bağımsız değişkenini kullanın, yani C-u C-c p fprojedeki dosyaları hızlı bir şekilde geçersiz kılın ve bulun. Kullanmayla ilgili açıklamadaki öneri projectile-cache-current-fileteknik olarak doğrudur, ancak find-fileaçılan her yeni dosyada bunu otomatik olarak çağıran bir kanca vardır . Bu, mevcut önbelleği geçersiz kılmadan en hızlı çözüm olacaktır.

Ancak, asıl sorun, ağacın üzerinden geçerek önbelleği yeniden oluşturmak çok uzun sürmesi gibi görünüyor. Bunun için çevreniz hakkında biraz daha fazla bilgi olması yardımcı olacaktır. Varsayılan olarak, daha taşınabilir olduğu için elisp uygulamasını tercih eden pencerelerde projectile-indexing-methodayarlanır . Aksi takdirde bir yöntem, yani , vb. Kullanır . Eğer linux üzerindeyseniz, yabancı yöntem varsayılan olarak etkindir.'nativefind'aliengit lsfind

Aksi takdirde bir tavşan deliğinden aşağı kovalamak isteyebilirsiniz projectile-get-repo-filesve projectile-get-ext-command. Merminin dosya listesini nerede arayacağını belirtirler. Daha hızlı bir arama yöntemini zorlamak için dir-local veya benzerleriyle bunu geçersiz kılabilirsiniz.


2

Bu, dosya önbelleğini hızlandırmaz, ancak eski önbelleği geçersiz kılmak zorunda kalmadan (yeni dosyayı içermeyen) manuel adımı kaydeder.

/your/projectile/project/root/.projectileDosya proje önbellek dosyasından daha yeni ise, Projectile önbelleği otomatik olarak geçersiz kılar .

Bu kontrol, mermi kullanarak projedeki herhangi bir dosyayı bulmaya çalıştığınızda yapılır; projectile-find-fileveya C-c p fbunu yapan komutlardan biri önce kontrol ederse.

(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)))

- projectile.elKaynaktan - 575-579 satırları

Yani çözüm için dosyanın zaman projeyi güncelleyin. Örneğin, şunları yapabilirsiniz , vb yapmaktouch.projectilealiasgit commitgit pull

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

gitkomutlarla ne yaparsan yap .

Ekibinizdeki bir kişi projeye yeni bir dosya eklerse ve (sürüm denetimine git kullandığınızı varsayarak) özel takma adı git pull'unuzu kullanırsanız projectile-find-file, bir dahaki sefere yaptığınızda önbellek otomatik olarak geçersiz kılınır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.