Function: ede-directory-get-toplevel-open-project
ede-directory-get-toplevel-open-project is a byte-compiled function
defined in files.el.gz.
Signature
(ede-directory-get-toplevel-open-project DIR &optional EXACT)
Documentation
Return an already open toplevel project that is managing DIR.
If optional EXACT is non-nil, only return exact matches for DIR.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/ede/files.el.gz
;; Force all users to switch to `ede-directory-get-open-project'
;; for performance reasons.
(defun ede-directory-get-toplevel-open-project (dir &optional exact)
"Return an already open toplevel project that is managing DIR.
If optional EXACT is non-nil, only return exact matches for DIR."
(let ((ft (file-name-as-directory (expand-file-name dir)))
(all ede-projects)
(ans nil)
(shortans nil))
(while (and all (not ans))
;; Do the check.
(let ((pd (expand-file-name (oref (car all) directory))))
(cond
;; Exact text match.
((string= pd ft)
(setq ans (car all)))
;; Some sub-directory
((and (not exact) (string-match (concat "^" (regexp-quote pd)) ft))
(if (not shortans)
(setq shortans (car all))
;; We already have a short answer, so see if pd (the match we found)
;; is longer. If it is longer, then it is more precise.
(when (< (length (oref shortans directory))
(length pd))
(setq shortans (car all))))
)
;; Exact inode match. Useful with symlinks or complex automounters.
((and (not ede--disable-inode)
(let ((pin (ede--project-inode (car all)))
(inode (ede--inode-for-dir dir)))
(and (not (eql pin 0)) (equal pin inode))))
(setq ans (car all)))
;; Subdir via truename - slower by far, but faster than a traditional lookup.
;; Note that we must resort to truename in order to resolve issues such as
;; cross-symlink projects.
((and (not exact)
(let ((ftn (file-truename ft))
(ptd (file-truename pd)))
(string-match (concat "^" (regexp-quote ptd)) ftn)))
(if (not shortans)
(setq shortans (car all))
;; We already have a short answer, so see if pd (the match we found)
;; is longer. If it is longer, then it is more precise.
(when (< (length (expand-file-name (oref shortans directory)))
(length pd))
(setq shortans (car all))))
)))
(setq all (cdr all)))
;; If we have an exact answer, use that, otherwise use
;; the short answer we found -> ie - we are in a subproject.
(or ans shortans)))