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

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

[elpa] master 5bbcfcf 18/92: Started diff model


From: Alexey Veretennikov
Subject: [elpa] master 5bbcfcf 18/92: Started diff model
Date: Thu, 11 Jun 2015 19:47:54 +0000

branch: master
commit 5bbcfcf16c9cbeb15e5b1ec3348f96e2951c1370
Author: Alexey Veretennikov <address@hidden>
Commit: Alexey Veretennikov <address@hidden>

    Started diff model
---
 ztree-diff-model.el |   68 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 68 insertions(+), 0 deletions(-)

diff --git a/ztree-diff-model.el b/ztree-diff-model.el
new file mode 100644
index 0000000..3727358
--- /dev/null
+++ b/ztree-diff-model.el
@@ -0,0 +1,68 @@
+;; Diff model
+
+(defun ztree-diff-model-get-left-path (node)
+  (plist-get node 'path))
+
+(defun ztree-diff-model-create-node (left-full-path right-full-path short-name 
children different)
+  (let (node)
+    (setq node (plist-put node 'left left-full-path))
+    (setq node (plist-put node 'right right-full-path))
+    (setq node (plist-put node 'short short-name))
+    (setq node (plist-put node 'children children))
+    (setq node (plist-put node 'different different))))
+
+
+(defun file-short-name (file)
+  "Base file/directory name. Taken from
+ http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg01238.html";
+  (printable-string (file-name-nondirectory (directory-file-name file))))
+
+
+(defun ztree-diff-model-files-are-different (file1 file2)
+  (let ((diff-output (shell-command-to-string (concat "diff -q" " " file1 " " 
file2))))
+    (> (length diff-output) 2)))
+
+(defun ztree-diff-model-traverse (path1 path2)
+  (let ((list1 (directory-files path1 'full))
+        (list2 (directory-files path2 'full))
+        (result nil))
+    ;; first - adding all files from left directory
+    (dolist (file1 list1)
+      (let ((simple-name (file-short-name file1)))
+        ;; if a file is not a special
+        (if (not (or (string-equal simple-name ".")
+                     (string-equal simple-name "..")))
+            ;; find if the file is in the second directory
+            (let ((file2 (ztree-find list2
+                                     #'(lambda (x) (string-equal 
(file-short-name x)
+                                                                 
simple-name))))
+                  (children nil)
+                  (different nil))
+              (when (and file2
+                         (not (file-directory-p file1))
+                         (setq different
+                               (ztree-diff-model-files-are-different file1 
file2))))
+              (push (ztree-diff-model-create-node file1 file2 simple-name nil 
different)
+                    result)))))
+    ;; second - adding files from right directory which are missing in first 
directory
+    (dolist (file2 list2)
+      (let ((simple-name (file-short-name file2)))
+        ;; if a file is not a special
+        (if (not (or (string-equal simple-name ".")
+                     (string-equal simple-name "..")))
+            ;; find if the file is in the second directory
+            (let ((file1 (ztree-find list1
+                                     #'(lambda (x) (string-equal 
(file-short-name x)
+                                                                 
simple-name))))
+                  (children nil))
+              (when (not file1)
+                (push (ztree-diff-model-create-node nil file2 simple-name 
children nil)
+                    result))))))
+    result))
+
+(dolist (diff 
+         (ztree-diff-model-traverse "/Users/alexeyv/Sources/Science/libsexp"
+                                    
"/Users/alexeyv/Sources/Science/libsexpv1"))
+  (print diff))
+                              
+        



reply via email to

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