Ticket UUID: | 591647 | |||
Title: | file copy patch to copy files not links | |||
Type: | Patch | Version: | None | |
Submitter: | vincentdarley | Created on: | 2002-08-06 16:51:19 | |
Subsystem: | 37. File System | Assigned To: | vincentdarley | |
Priority: | 4 | Severity: | ||
Status: | Open | Last Modified: | 2003-11-13 05:32:17 | |
Resolution: | Postponed | Closed By: | hobbs | |
Closed on: | 2002-08-08 08:56:46 | |||
Description: |
Jeff, here's a patch (just one file changed) which will make 'file copy' operate on files instead of links. With this patch incorporated, one test (fCmd- 28.15) needs modifying as well. All other tests should pass. | |||
User Comments: |
hobbs added on 2002-09-03 01:39:53:
Logged In: YES user_id=72656 This has been postponed for beyond 8.4, until it can be further discussed. It's likely better to try it as a file copy option, or perhaps just as a tcllib function, due to all the funky cases that could be hit. nobody added on 2002-08-13 20:16:18: Logged In: NO This code should do it: Tcl_Obj *path = Tcl_FSLink(actualSource, NULL, 0); if (path == NULL) { break; } /* * Now we want to check if this is a relative path, * and if so, to make it absolute */ if (Tcl_FSGetPathType(path) == TCL_PATH_RELATIVE) { Tcl_Obj *abs = Tcl_FSJoinToPath (actualSource, 1, &path); if (abs == NULL) break; Tcl_IncrRefCount(abs); Tcl_DecrRefCount(path); path = abs; } Tcl_DecrRefCount(actualSource); actualSource = path; counter++; hobbs added on 2002-08-08 17:40:32: Logged In: YES user_id=72656 this looks like it will have lots of little problems like this ... I'm backing out the functionality for now, leaving the code #if 0'd out. The more I think about it, the more it actually seems reasonable what Tcl was doing ... otherwise it seems like we have to provide all sorts of options to enable the old behavior for those that might have wanted it. hemanglavana added on 2002-08-08 16:53:38: Logged In: YES user_id=81875 Here's a corner case which results in error when <srcfile> is a softlink and file copy is invoked from another directory: godel:43> ls -lR .: total 16 drwxr-xr-x 2 hlavana eng 141 Aug 8 05:47 test ./test: total 16 lrwxrwxrwx 1 hlavana eng 3 Aug 8 05:47 bar -> foo -rw-r--r-- 1 hlavana eng 0 Aug 8 05:46 foo godel:44> /tmp/hlavana/tcltk/bin/tclsh8.4 % file copy test/bar xxx error copying "test/bar" to "xxx": no such file or directory % cd test % file copy bar ../xxx % exit godel:45> ls -l total 16 drwxr-xr-x 2 hlavana eng 141 Aug 8 05:47 test -rw-r--r-- 1 hlavana eng 0 Aug 8 05:46 xxx godel:46> Thus, softlinks pointing to relative paths need to converted into absolute paths first before invoking the real file copy. hobbs added on 2002-08-08 15:56:36: Logged In: YES user_id=72656 had to update several more tests, but it is working now for 8.4b2. vincentdarley added on 2002-08-06 23:51:19: File Added - 28539: tclFCmd.diff |
Attachments:
- tclFCmd.diff [download] added by vincentdarley on 2002-08-06 23:51:19. [details]