emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/elisa 86f4ea0afb 74/98: Fix parsing info manuals with i


From: ELPA Syncer
Subject: [elpa] externals/elisa 86f4ea0afb 74/98: Fix parsing info manuals with infinite loop
Date: Wed, 17 Jul 2024 18:58:06 -0400 (EDT)

branch: externals/elisa
commit 86f4ea0afb4f12cca7b5b8ff0d14e70607005029
Author: Sergey Kostyaev <kostyaev.sergey2@wb.ru>
Commit: Sergey Kostyaev <kostyaev.sergey2@wb.ru>

    Fix parsing info manuals with infinite loop
    
    For example info-stnd. See #11
---
 elisa.el | 75 ++++++++++++++++++++++++++++++++++------------------------------
 1 file changed, 40 insertions(+), 35 deletions(-)

diff --git a/elisa.el b/elisa.el
index 2f7b6258e3..5499f20809 100644
--- a/elisa.el
+++ b/elisa.el
@@ -414,49 +414,54 @@ FOREIGN KEY(collection_id) REFERENCES collections(rowid)
                                         collection-name))))))
            (kind-id (caar (sqlite-select
                            elisa-db "select rowid from kinds where name = 
'info';")))
-           (continue t))
+           (continue t)
+           (parsed-nodes nil))
        (while continue
          (let* ((node-name (concat "(" (file-name-sans-extension
                                         (file-name-nondirectory 
Info-current-file))
                                    ") "
                                    Info-current-node))
                 (chunks (elisa-split-semantically)))
-           (mapc
-            (lambda (text)
-              (let* ((hash (secure-hash 'sha256 text))
-                     (embedding (llm-embedding elisa-embeddings-provider text))
-                     (rowid
-                      (if-let ((rowid (caar (sqlite-select
-                                             elisa-db
-                                             (format "select rowid from data 
where kind_id = %s and collection_id = %s and path = '%s' and hash = '%s';"
-                                                     kind-id collection-id
-                                                     (elisa-sqlite-escape 
node-name) hash)))))
-                          nil
+           (if (not (cl-find node-name parsed-nodes :test 'string-equal))
+               (progn
+                 (mapc
+                  (lambda (text)
+                    (let* ((hash (secure-hash 'sha256 text))
+                           (embedding (llm-embedding elisa-embeddings-provider 
text))
+                           (rowid
+                            (if-let ((rowid (caar (sqlite-select
+                                                   elisa-db
+                                                   (format "select rowid from 
data where kind_id = %s and collection_id = %s and path = '%s' and hash = '%s';"
+                                                           kind-id 
collection-id
+                                                           
(elisa-sqlite-escape node-name) hash)))))
+                                nil
+                              (sqlite-execute
+                               elisa-db
+                               (format
+                                "insert into data(kind_id, collection_id, 
path, hash, data) values (%s, %s, '%s', '%s', '%s');"
+                                kind-id collection-id
+                                (elisa-sqlite-escape node-name) hash 
(elisa-sqlite-escape text)))
+                              (caar (sqlite-select
+                                     elisa-db
+                                     (format "select rowid from data where 
kind_id = %s and collection_id = %s and path = '%s' and hash = '%s';"
+                                             kind-id collection-id
+                                             (elisa-sqlite-escape node-name) 
hash))))))
+                      (when rowid
                         (sqlite-execute
                          elisa-db
-                         (format
-                          "insert into data(kind_id, collection_id, path, 
hash, data) values (%s, %s, '%s', '%s', '%s');"
-                          kind-id collection-id
-                          (elisa-sqlite-escape node-name) hash 
(elisa-sqlite-escape text)))
-                        (caar (sqlite-select
-                               elisa-db
-                               (format "select rowid from data where kind_id = 
%s and collection_id = %s and path = '%s' and hash = '%s';"
-                                       kind-id collection-id
-                                       (elisa-sqlite-escape node-name) 
hash))))))
-                (when rowid
-                  (sqlite-execute
-                   elisa-db
-                   (format "insert into data_embeddings(rowid, embedding) 
values (%s, %s);"
-                           rowid (elisa-vector-to-sqlite embedding)))
-                  (sqlite-execute
-                   elisa-db
-                   (format "insert into data_fts(rowid, data) values (%s, 
'%s');"
-                           rowid (elisa-sqlite-escape text))))))
-            chunks)
-           (condition-case nil
-               (funcall-interactively #'Info-forward-node)
-             (error
-              (setq continue nil)))))))))
+                         (format "insert into data_embeddings(rowid, 
embedding) values (%s, %s);"
+                                 rowid (elisa-vector-to-sqlite embedding)))
+                        (sqlite-execute
+                         elisa-db
+                         (format "insert into data_fts(rowid, data) values 
(%s, '%s');"
+                                 rowid (elisa-sqlite-escape text))))))
+                  chunks)
+                 (push node-name parsed-nodes)
+                 (condition-case nil
+                     (funcall-interactively #'Info-forward-node)
+                   (error
+                    (setq continue nil))))
+             (setq continue nil))))))))
 
 (defun elisa--find-similar (text collections)
   "Find similar to TEXT results in COLLECTIONS.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]