[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))
+
+
- [elpa] master a0c9a9d 08/92: Updated readme, (continued)
- [elpa] master a0c9a9d 08/92: Updated readme, Alexey Veretennikov, 2015/06/11
- [elpa] master ffe7b3b 07/92: Updated readme, Alexey Veretennikov, 2015/06/11
- [elpa] master b43e0e7 12/92: Added header face, Alexey Veretennikov, 2015/06/11
- [elpa] master c7eb2c2 02/92: Initial import - fork from difftree, Alexey Veretennikov, 2015/06/11
- [elpa] master 7c739c4 11/92: Added faces for arrows and [+] signs, Alexey Veretennikov, 2015/06/11
- [elpa] master aa7f07a 10/92: Added Backspace support, Alexey Veretennikov, 2015/06/11
- [elpa] master eb4ad8e 19/92: Removed test code!, Alexey Veretennikov, 2015/06/11
- [elpa] master 457f48e 13/92: Updated readme, Alexey Veretennikov, 2015/06/11
- [elpa] master 33fe3a2 14/92: Added support for double backspace for closing open directories, Alexey Veretennikov, 2015/06/11
- [elpa] master 70d8bc5 17/92: Updated - aligned 80 chars in width, Alexey Veretennikov, 2015/06/11
- [elpa] master 5bbcfcf 18/92: Started diff model,
Alexey Veretennikov <=
- [elpa] master b1de530 16/92: Isolated tree 'control' from the directory model, Alexey Veretennikov, 2015/06/11
- [elpa] master 7eb950e 22/92: Updated readme, Alexey Veretennikov, 2015/06/11
- [elpa] master 1279a61 28/92: Added face argument for ztree-draw-char and set face for vertical line in 2 trees mode, Alexey Veretennikov, 2015/06/11
- [elpa] master 120ffcb 15/92: Preparing to isolate ztree from directories api, Alexey Veretennikov, 2015/06/11
- [elpa] master 41d4c09 23/92: Fixed model issue when all files in added subtree looks like directories, Alexey Veretennikov, 2015/06/11
- [elpa] master 2f888c5 26/92: Added util file, Alexey Veretennikov, 2015/06/11
- [elpa] master 41ab149 29/92: Added sorting to the tree, Alexey Veretennikov, 2015/06/11
- [elpa] master d0e255e 20/92: Implemented difftree model, Alexey Veretennikov, 2015/06/11
- [elpa] master a39e8c6 24/92: Started preparation for 2 column tree, Alexey Veretennikov, 2015/06/11
- [elpa] master 3260487 25/92: Preparing for the double tree drawing, Alexey Veretennikov, 2015/06/11