# HG changeset patch # User Sam Steingold # Date 1226465238 0 # Node ID ea9a7a9912a9262b5c7addafb023bccb046c1958 # Parent 6f3388683948a13407e66c03f4dbf6cc429a5eed (vc-cvs-parse-root): Handle roots without colon between hostname and path. diff -r 6f3388683948 -r ea9a7a9912a9 lisp/ChangeLog --- a/lisp/ChangeLog Tue Nov 11 20:14:38 2008 +0000 +++ b/lisp/ChangeLog Wed Nov 12 04:47:18 2008 +0000 @@ -1,3 +1,8 @@ +2008-11-12 Sam Steingold + + * vc-cvs.el (vc-cvs-parse-root): Handle roots without colon + between hostname and path. + 2008-11-11 Juri Linkov * dired-aux.el (dired-isearch-filenames) diff -r 6f3388683948 -r ea9a7a9912a9 lisp/vc-cvs.el --- a/lisp/vc-cvs.el Tue Nov 11 20:14:38 2008 +0000 +++ b/lisp/vc-cvs.el Wed Nov 12 04:47:18 2008 +0000 @@ -720,10 +720,16 @@ (buffer-substring (point) (line-end-position)))))))) +(defun vc-cvs-parse-uhp (path) + "parse user@host/path into (user@host /path)" + (if (string-match "\\([^/]+\\)\\(/.*\\)" path) + (list (match-string 1 path) (match-string 2 path)) + (list nil path))) + (defun vc-cvs-parse-root (root) "Split CVS ROOT specification string into a list of fields. A CVS root specification of the form - [:METHOD:][[USER@]HOSTNAME:]/path/to/repository + [:METHOD:][[USER@]HOSTNAME]:?/path/to/repository is converted to a normalized record with the following structure: \(METHOD USER HOSTNAME CVS-ROOT). The default METHOD for a CVS root of the form @@ -745,17 +751,16 @@ ;; Invalid CVS root nil) ((= len 1) - ;; Simple PATH => method `local' - (cons "local" - (cons nil root-list))) + (let ((uhp (vc-cvs-parse-uhp (car root-list)))) + (cons (if (car uhp) "ext" "local") uhp))) ((= len 2) ;; [USER@]HOST:PATH => method `ext' (and (not (equal (car root-list) "")) (cons "ext" root-list))) ((= len 3) - ;; :METHOD:PATH + ;; :METHOD:PATH or :METHOD:USER@HOSTNAME/PATH (cons (cadr root-list) - (cons nil (cddr root-list)))) + (vc-cvs-parse-uhp (caddr root-list)))) (t ;; :METHOD:[USER@]HOST:PATH (cdr root-list)))))