Projektil mit Caching mag keine neuen Dateien


9

Ich benutze Projectile für mein Projekt-Browsing. Ich habe gesehen, dass es sehr langsam ist, also habe ich das Caching aktiviert. Jetzt ist es schnell (leider nicht besonders schnell).

Wenn ich eine neue Datei außerhalb von Emacs selbst erstelle, findet Projectile sie nicht. Ich kann die Cache-Ungültigmachung ausführen, aber das dauert einige Minuten. Wie kann ich das beheben?


Sie können die Datei öffnen und manuell mit zum Cache hinzufügen M-x projectile-cache-current-file. Wenn Sie dies nicht möchten, muss Emacs den gesamten Baum nach Dateien durchsuchen, damit keine Optimierungen vorgenommen werden können.
PythonNut

1
Ich schlage vor, eine Funktionsanforderung zur Unterstützung der eingebauten filenotify.elBibliothek zu öffnen , die es Projectile meiner Meinung nach ermöglichen würde, Verzeichnisänderungen zu verfolgen und folglich informiert zu werden, wenn eine neue Datei (oder ein neues Verzeichnis zur Verfolgung) erstellt (oder gelöscht) wurde, damit sie automatisch hinzugefügt werden kann (oder entfernen) Sie die Dateien in / aus dem Cache. Verzeichnisbenachrichtigungen sind nicht rekursiv, daher würde diese Funktion die unabhängige Verfolgung jedes Verzeichnisses im Projekt beinhalten. Ich weiß nicht, ob dies für einen großen Projektbaum spürbare Strafen nach sich ziehen würde.
Phils

Antworten:


4

Verwenden Sie das Präfix-Argument, C-u C-c p fum Dateien im Projekt schnell ungültig zu machen und zu finden. Der Vorschlag im Kommentar zur Verwendung projectile-cache-current-fileist technisch korrekt, aber es gibt einen Hook find-file, der dies automatisch bei jeder neuen Datei aufruft, die geöffnet wird. Dies ist die schnellste Lösung, ohne den vorhandenen Cache ungültig zu machen.

Es hört sich jedoch so an, als ob das eigentliche Problem darin besteht, dass es zu lange dauert, den Cache durch Durchlaufen des Baums neu zu erstellen. Hierfür wäre es hilfreich, wenn Sie ein wenig mehr Informationen über Ihre Umgebung hätten. Standardmäßig projectile-indexing-methodist 'nativeWindows aktiviert, was eine einfache Implementierung bevorzugt, findda es portabler ist. Andernfalls verwendet es ein 'alienVerfahren, das heißt git ls, findusw. Wenn Sie sind Linux die fremde Methode standardmäßig obwohl aktiviert ist.

Andernfalls möchten Sie vielleicht das Kaninchenloch von projectile-get-repo-filesund jagen projectile-get-ext-command. Sie geben an, wo das Projektil nach der Liste der Dateien sucht. Es ist möglich, dass Sie dies mit Dir-Einheimischen oder Ähnlichem überschreiben, um eine schnellere Suchmethode zu erzwingen.


2

Dies beschleunigt das Zwischenspeichern von Dateien nicht, erspart jedoch den manuellen Schritt, den veralteten Cache (der die neue Datei nicht enthält) ungültig zu machen.

Projectile macht den Cache automatisch ungültig, wenn die /your/projectile/project/root/.projectileDatei neuer als die Projekt-Cache-Datei ist.

Diese Überprüfung wird immer dann durchgeführt, wenn Sie versuchen, mithilfe von projectile eine Datei im Projekt zu finden. projectile-find-fileoder C-c p fwenn einer der Befehle, der dies ausführt, zuerst prüft.

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

- Von der projectile.elQuelle - Linien 575-579

Die Lösung liegt also in touchder .projectileDatei, wenn Sie das Projekt aktualisieren. Zum Beispiel können Sie aliasdas git commit, git pullusw. zu tun

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

nachdem Sie alles getan haben, was Sie mit den gitBefehlen getan haben .

Wenn also jemand in Ihrem Team dem Projekt eine neue Datei hinzufügt und (vorausgesetzt, Sie verwenden Git zur Versionskontrolle) Ihren speziellen Alias-Git-Pull verwendet, wird der Cache projectile-find-filebeim nächsten Mal automatisch ungültig .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.