magit/magit — Issue #311: args-out-of-range from magit-status
Author: dabrahams
Created: 2012-01-02 17:32:56+00:00
State: open

I recently increased `magit-repo-dirs-depth` from 1 to 3 and then `C-u M-x magit-status' gave me this backtrace. When I removed some directories (e.g. "/Users/dave/src/fossbot-top") from magit-repo-dirs so that any given repo would only be found in one of the listed directory trees, the error went away.

```cl
Debugger entered--Lisp error: (args-out-of-range "/Users/dave/src/fossbot-top/fossbot" 0 -1)
substring("/Users/dave/src/fossbot-top/fossbot" 0 -36)
(directory-file-name (substring entry 0 (- (length key))))
(let ((dir (directory-file-name (substring entry 0 (- (length key)))))) (cons (concat (file-name-nondirectory dir) "/" key) entry))
(lambda (entry) (let ((dir (directory-file-name (substring entry 0 (- (length key)))))) (cons (concat (file-name-nondirectory dir) "/" key) entry)))("/Users/dave/src/fossbot-top/fossbot")
mapcar((lambda (entry) (let ((dir (directory-file-name (substring entry 0 (- (length key)))))) (cons (concat (file-name-nondirectory dir) "/" key) entry))) ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot"))
(magit-remove-conflicts (mapcar (lambda (entry) (let ((dir (directory-file-name (substring entry 0 ...)))) (cons (concat (file-name-nondirectory dir) "/" key) entry))) value))
(let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let (...) (cons ... entry))) value)))) (setq result (append result sub)))
(if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let ... ...)) value)))) (setq result (append result sub))))
(lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub)))))("//Users/dave/src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot"))
maphash((lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub))))) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("//Users/dave/src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot") ...)))
(let ((dict (make-hash-table :test (quote equal))) (result nil)) (dolist (a alist) (puthash (car a) (cons (cdr a) (gethash (car a) dict)) dict)) (maphash (lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts ...))) (setq result (append result sub))))) dict) result)
magit-remove-conflicts((("//Users/dave/src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot") ("//Users/dave/src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot")))
(let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let (...) (cons ... entry))) value)))) (setq result (append result sub)))
(if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let ... ...)) value)))) (setq result (append result sub))))
(lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub)))))("/Users/dave/src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot"))
maphash((lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub))))) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("/Users/dave/src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot") ...)))
(let ((dict (make-hash-table :test (quote equal))) (result nil)) (dolist (a alist) (puthash (car a) (cons (cdr a) (gethash (car a) dict)) dict)) (maphash (lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts ...))) (setq result (append result sub))))) dict) result)
magit-remove-conflicts((("/Users/dave/src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot") ("/Users/dave/src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot")))
(let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let (...) (cons ... entry))) value)))) (setq result (append result sub)))
(if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let ... ...)) value)))) (setq result (append result sub))))
(lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub)))))("Users/dave/src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot"))
maphash((lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub))))) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("Users/dave/src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot") ...)))
(let ((dict (make-hash-table :test (quote equal))) (result nil)) (dolist (a alist) (puthash (car a) (cons (cdr a) (gethash (car a) dict)) dict)) (maphash (lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts ...))) (setq result (append result sub))))) dict) result)
magit-remove-conflicts((("Users/dave/src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot") ("Users/dave/src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot")))
(let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let (...) (cons ... entry))) value)))) (setq result (append result sub)))
(if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let ... ...)) value)))) (setq result (append result sub))))
(lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub)))))("dave/src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot"))
maphash((lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub))))) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("dave/src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot") ...)))
(let ((dict (make-hash-table :test (quote equal))) (result nil)) (dolist (a alist) (puthash (car a) (cons (cdr a) (gethash (car a) dict)) dict)) (maphash (lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts ...))) (setq result (append result sub))))) dict) result)
magit-remove-conflicts((("dave/src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot") ("dave/src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot")))
(let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let (...) (cons ... entry))) value)))) (setq result (append result sub)))
(if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let ... ...)) value)))) (setq result (append result sub))))
(lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub)))))("src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot"))
maphash((lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub))))) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("src/fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot") ...)))
(let ((dict (make-hash-table :test (quote equal))) (result nil)) (dolist (a alist) (puthash (car a) (cons (cdr a) (gethash (car a) dict)) dict)) (maphash (lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts ...))) (setq result (append result sub))))) dict) result)
magit-remove-conflicts((("src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot") ("src/fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot")))
(let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let (...) (cons ... entry))) value)))) (setq result (append result sub)))
(if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let ... ...)) value)))) (setq result (append result sub))))
(lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub)))))("fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot"))
maphash((lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub))))) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("fossbot-top/fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot") ...)))
(let ((dict (make-hash-table :test (quote equal))) (result nil)) (dolist (a alist) (puthash (car a) (cons (cdr a) (gethash (car a) dict)) dict)) (maphash (lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts ...))) (setq result (append result sub))))) dict) result)
magit-remove-conflicts((("fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot") ("fossbot-top/fossbot" . "/Users/dave/src/fossbot-top/fossbot")))
(let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let (...) (cons ... entry))) value)))) (setq result (append result sub)))
(if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda (entry) (let ... ...)) value)))) (setq result (append result sub))))
(lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub)))))("fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot"))
maphash((lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts (mapcar (lambda ... ...) value)))) (setq result (append result sub))))) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("zorg" ("/Users/dave/src/zorg") "wp-theme2" ("/Users/dave/src/wp-theme2") "wp-theme" ("/Users/dave/src/wp-theme") "winexe.1" ("/Users/dave/src/winexe.1") "wiegleymacs" ("/Users/dave/src/wiegleymacs") "std-info" ("/Users/dave/src/std-info") "slides" ("/Users/dave/src/slides") "sift" ("/Users/dave/src/sift") "pyth-llvm" ("/Users/dave/src/pyth-llvm") "pyth-clang" ("/Users/dave/src/pyth-clang") "org-mode" ("/Users/dave/src/org-mode") "offlineimap" ("/Users/dave/src/offlineimap") "mplbook" ("/Users/dave/src/mplbook") "modularize" ("/Users/dave/src/modularize") "llvm-project" ("/Users/dave/src/llvm-project") "llvm" ("/Users/dave/src/llvm") "linkdups" ("/Users/dave/src/linkdups") "legacy-svn-archive" ("/Users/dave/src/legacy-svn-archive") "lazy_reload" ("/Users/dave/src/lazy_reload") "in3xes-buildbot" ("/Users/dave/src/in3xes-buildbot") "gitolite-admin" ("/Users/dave/src/gitolite-admin") "git-submodule-tools" ("/Users/dave/src/git-submodule-tools") "fossbot" ("/Users/dave/src/fossbot-top/fossbot" "/Users/dave/src/fossbot-top/fossbot") "emacs" ("/Users/dave/src/emacs") "elisp" ("/Users/dave/src/elisp") "elhome" ("/Users/dave/src/elhome") "el-get-dev" ("/Users/dave/src/el-get-dev") "el-get" ("/Users/dave/src/el-get") "dwamacs" ("/Users/dave/src/dwamacs") "redmine-boostpro" ("/Users/dave/src/corp/redmine-boostpro") "xxx-options" ("/Users/dave/src/corp/zzzz/xxx-options") "edg" ("/Users/dave/src/corp/edg") "cpp11" ("/Users/dave/src/corp/cpp11") "BestPractices" ("/Users/dave/src/corp/BestPractices") "clang" ("/Users/dave/src/clang") "buildbot" ("/Users/dave/src/buildbot") "boost-git-svn-mirror" ("/Users/dave/src/boost/boost-git-svn-mirror") "bbproto" ("/Users/dave/src/bbproto-top/bbproto") "bbotpriv" ("/Users/dave/src/bbotpriv-top/bbotpriv" "/Users/dave/src/bbotpriv-top/bbotpriv") "master" ("/Users/dave/src/bbot-remote/master") ...)))
(let ((dict (make-hash-table :test (quote equal))) (result nil)) (dolist (a alist) (puthash (car a) (cons (cdr a) (gethash (car a) dict)) dict)) (maphash (lambda (key value) (if (= (length value) 1) (push (cons key (car value)) result) (let ((sub (magit-remove-conflicts ...))) (setq result (append result sub))))) dict) result)
magit-remove-conflicts((("zorg" . "/Users/dave/src/zorg") ("wp-theme2" . "/Users/dave/src/wp-theme2") ("wp-theme" . "/Users/dave/src/wp-theme") ("winexe.1" . "/Users/dave/src/winexe.1") ("wiegleymacs" . "/Users/dave/src/wiegleymacs") ("std-info" . "/Users/dave/src/std-info") ("slides" . "/Users/dave/src/slides") ("sift" . "/Users/dave/src/sift") ("pyth-llvm" . "/Users/dave/src/pyth-llvm") ("pyth-clang" . "/Users/dave/src/pyth-clang") ("org-mode" . "/Users/dave/src/org-mode") ("offlineimap" . "/Users/dave/src/offlineimap") ("mplbook" . "/Users/dave/src/mplbook") ("modularize" . "/Users/dave/src/modularize") ("llvm-project" . "/Users/dave/src/llvm-project") ("llvm" . "/Users/dave/src/llvm") ("linkdups" . "/Users/dave/src/linkdups") ("legacy-svn-archive" . "/Users/dave/src/legacy-svn-archive") ("lazy_reload" . "/Users/dave/src/lazy_reload") ("in3xes-buildbot" . "/Users/dave/src/in3xes-buildbot") ("gitolite-admin" . "/Users/dave/src/gitolite-admin") ("git-submodule-tools" . "/Users/dave/src/git-submodule-tools") ("fossbot" . "/Users/dave/src/fossbot-top/fossbot") ("emacs" . "/Users/dave/src/emacs") ("elisp" . "/Users/dave/src/elisp") ("elhome" . "/Users/dave/src/elhome") ("el-get-dev" . "/Users/dave/src/el-get-dev") ("el-get" . "/Users/dave/src/el-get") ("dwamacs" . "/Users/dave/src/dwamacs") ("redmine-boostpro" . "/Users/dave/src/corp/redmine-boostpro") ("xxx-options" . "/Users/dave/src/corp/zzzz/xxx-options") ("edg" . "/Users/dave/src/corp/edg") ("cpp11" . "/Users/dave/src/corp/cpp11") ("BestPractices" . "/Users/dave/src/corp/BestPractices") ("clang" . "/Users/dave/src/clang") ("buildbot" . "/Users/dave/src/buildbot") ("boost-git-svn-mirror" . "/Users/dave/src/boost/boost-git-svn-mirror") ("bbproto" . "/Users/dave/src/bbproto-top/bbproto") ("bbotpriv" . "/Users/dave/src/bbotpriv-top/bbotpriv") ("master" . "/Users/dave/src/bbot-remote/master") ("bbotpriv" . "/Users/dave/src/bbotpriv-top/bbotpriv") ("fossbot" . "/Users/dave/src/fossbot-top/fossbot")))
magit-list-repos(("/Users/dave/src" "/Users/dave/src/bbotpriv-top" "/Users/dave/src/fossbot-top"))
(let* ((repos (magit-list-repos magit-repo-dirs)) (reply (magit-completing-read "Git repository: " repos))) (file-name-as-directory (or (cdr (assoc reply repos)) (if (file-directory-p reply) (expand-file-name reply) (error "Not a repository or a directory: %s" reply)))))
(if (and (not dir) magit-repo-dirs) (let* ((repos (magit-list-repos magit-repo-dirs)) (reply (magit-completing-read "Git repository: " repos))) (file-name-as-directory (or (cdr (assoc reply repos)) (if (file-directory-p reply) (expand-file-name reply) (error "Not a repository or a directory: %s" reply))))) (file-name-as-directory (read-directory-name "Git repository: " (or (magit-get-top-dir default-directory) default-directory))))
magit-read-top-dir(nil)
(if current-prefix-arg (magit-read-top-dir (> (prefix-numeric-value current-prefix-arg) 4)) (or (magit-get-top-dir default-directory) (magit-read-top-dir nil)))
(list (if current-prefix-arg (magit-read-top-dir (> (prefix-numeric-value current-prefix-arg) 4)) (or (magit-get-top-dir default-directory) (magit-read-top-dir nil))))
call-interactively(magit-status nil nil)
```