changeset 46307:a2d047d50fb9

(tramp-handle-make-symbolic-link): Implement.
author Kai Großjohann <kgrossjo@eu.uu.net>
date Thu, 11 Jul 2002 20:26:19 +0000
parents 66cce4969490
children b634913b5b45
files lisp/ChangeLog lisp/net/tramp.el
diffstat 2 files changed, 20 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Jul 11 19:59:07 2002 +0000
+++ b/lisp/ChangeLog	Thu Jul 11 20:26:19 2002 +0000
@@ -19,6 +19,7 @@
 	(tramp-handle-ange-ftp): Deleted.
 	(tramp-disable-ange-ftp): New function, called at toplevel,
 	deletes Ange-FTP from file-name-handler-alist.
+	(tramp-handle-make-symbolic-link): Implement.
 
 2002-07-10  Juanma Barranquero  <lektu@terra.es>
 
--- a/lisp/net/tramp.el	Thu Jul 11 19:59:07 2002 +0000
+++ b/lisp/net/tramp.el	Thu Jul 11 20:26:19 2002 +0000
@@ -1507,14 +1507,17 @@
 
 ;;; File Name Handler Functions:
 
-;; The following file name handler ops are not implemented (yet?).
-
 (defun tramp-handle-make-symbolic-link
   (filename linkname &optional ok-if-already-exists)
   "Like `make-symbolic-link' for tramp files.
-The LINKNAME argument should look like \"/path/to/target\" or
-\"relative-name\",and not like a Tramp filename."
-  (error "Not implemented yet")
+If LINKNAME is a non-Tramp file, it is used verbatim as the target of
+the symlink.  If LINKNAME is a Tramp file, only the path component is
+used as the target of the symlink.
+
+If LINKNAME is a Tramp file and the path component is relative, then
+it is expanded first, before the path component is taken.  Note that
+this can give surprising results if the user/host for the source and
+target of the symlink differ."
   (with-parsed-tramp-file-name linkname l
     (when (tramp-ange-ftp-file-name-p l-multi-method l-method)
       (tramp-invoke-ange-ftp 'make-symbolic-link
@@ -1527,8 +1530,7 @@
 		      "ln(1) does not exist on the remote host.")))
 
       ;; Do the 'confirm if exists' thing.
-      (when (file-exists-p (expand-file-name filename
-					     CCC))
+      (when (file-exists-p linkname)
 	;; What to do?
 	(if (or (null ok-if-already-exists) ; not allowed to exist
 		(and (numberp ok-if-already-exists)
@@ -1536,7 +1538,14 @@
 			   (format
 			    "File %s already exists; make it a link anyway? "
 			    l-path)))))
-	    (signal 'file-already-exists (list "File already exists" l-path))))
+	    (signal 'file-already-exists (list "File already exists" l-path))
+	  (delete-file linkname)))
+
+      ;; If FILENAME is a Tramp name, use just the path component.
+      (when (tramp-tramp-file-p filename)
+	(setq filename (tramp-file-name-path
+			(tramp-dissect-file-name
+			 (expand-file-name filename)))))
     
       ;; Right, they are on the same host, regardless of user, method, etc.
       ;; We now make the link on the remote machine. This will occur as the user
@@ -1546,8 +1555,8 @@
 	l-multi-method l-method l-user l-host
 	(format "cd %s && %s -sf %s %s"
 		cwd ln
-		l-path 
-		filename)
+		filename 
+		l-path)
 	t)))))