FileURI.st
author Stefan Vogel <sv@exept.de>
Thu, 12 Aug 2010 15:28:30 +0200
changeset 2484 6f252eb387f6
parent 2474 38de996b9ee0
child 2871 af6745fe3136
permissions -rw-r--r--
Fixes for SFTP/Solaris and '~' paths
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1309
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     1
"
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     2
 COPYRIGHT (c) 2002 by eXept Software AG
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     3
              All Rights Reserved
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     4
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     5
 This software is furnished under a license and may be used
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     6
 only in accordance with the terms of that license and with the
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     8
 be provided or otherwise made available to, or used by, any
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
     9
 other person.  No title to or ownership of the software is
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    10
 hereby transferred.
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    11
"
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic2' }"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
HierarchicalURI subclass:#FileURI
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:''
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
1310
948ed141b0b7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1309
diff changeset
    18
	category:'Net-Resources'
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
1309
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    21
!FileURI class methodsFor:'documentation'!
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    22
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    23
copyright
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    24
"
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    25
 COPYRIGHT (c) 2002 by eXept Software AG
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    26
              All Rights Reserved
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    27
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    28
 This software is furnished under a license and may be used
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    29
 only in accordance with the terms of that license and with the
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    31
 be provided or otherwise made available to, or used by, any
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    32
 other person.  No title to or ownership of the software is
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    33
 hereby transferred.
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    34
"
c752d54f4e09 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
    35
! !
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
!FileURI class methodsFor:'instance creation'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
fromFilename:aFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
    "create an URI based on an a filename"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
    ^ self new fromFilename:aFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
!FileURI class methodsFor:'accessing'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
schemes
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
    "answer the list of supported schemes"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
    ^ #(file)
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
!FileURI methodsFor:'converting'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
asFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
    "answer the receiver represented as filename"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
    ^ authority notNil ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
        Filename remoteHost:authority rootComponents:pathSegments.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
    ] ifFalse:[
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    61
        "kludge"
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    62
        (pathSegments first startsWith:$~) ifTrue:[
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    63
            pathSegments first asFilename construct:(Filename rootComponents:(pathSegments copyFrom:2)).
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    64
        ] ifFalse:[
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    65
            Filename rootComponents:pathSegments.
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    66
        ].
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
    ].
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    68
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    69
    "
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    70
        (URI fromString:'file:~/bla') asFilename
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    71
        (URI fromString:'file:~root/bla') asFilename 
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
    72
    "
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
1374
85c524889e47 category rename
Claus Gittinger <cg@exept.de>
parents: 1310
diff changeset
    75
!FileURI methodsFor:'initialization'!
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
fromFilename:aFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
    "create an URI based on an a filename"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
    |components|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
    components := aFilename components.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
    aFilename isAbsolute ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
        (components size > 3 and:[(components at:2) size == 0]) ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
            "this is a MS-Windows network path: \\host\path"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
            authority := components at:3.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
            pathSegments := components copyFrom:4.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
        ] ifFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
            "this is an absolute path"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
            isAbsolute := true.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
            pathSegments := components copyFrom:2.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
        ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
    ] ifFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
        "this is a relative path"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
        isAbsolute := false.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
        pathSegments := components.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
    ]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
    "
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   100
      self fromFilename:'/a/b/c'  asFilename   
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   101
      self fromFilename:'//a/b/c' asFilename  
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   102
      self fromFilename:'a/b/c'   asFilename    
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   106
!FileURI methodsFor:'queries'!
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   107
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   108
exists
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   109
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   110
    ^ self asFilename exists
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   111
! !
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   112
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
!FileURI methodsFor:'stream access'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
readStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
    ^ self asFilename readStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
     'file:/etc/group' asURI readStream contents
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   121
     'file:/~/.profile' asURI readStream contents
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   122
     (URI fromString:'file:~/.profile') asFilename
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   123
     (URI fromString:'file:~/.profile') readStream upToEnd
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
readStreamDo:aBlock
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
    "evaluate a block with the read stream as first argument
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
     and a dictionary containing attributes as second argument.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
     The stream is closed after aBlock has been evaluated."
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   132
    |attributes file stream|
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   134
    attributes := self class attributes.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   135
    file := self asFilename.
1519
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   136
    attributes at:#fileSize put:file fileSize.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   137
    attributes at:#baseName put:file baseName.  
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   138
    attributes at:#uriInfo  put:self printString.  
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   140
    ^ [ 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   141
        stream := file readStream.
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
        aBlock value:stream value:attributes
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
     ] ensure:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
        stream notNil ifTrue:[stream close]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
     ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
    "
1519
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   148
     '/etc/group' asURI readStreamDo:[:stream :attributes|
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   149
        stream contents         
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   150
                addFirst:attributes printString; 
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   151
                yourself
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   152
     ].
60bb9cc8727e comments
Stefan Vogel <sv@exept.de>
parents: 1436
diff changeset
   153
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
     'file:/etc/group' asURI readStreamDo:[:stream :attributes|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
        stream contents         
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
                addFirst:attributes printString; 
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
                yourself
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
     ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   162
readStreamsDo:aBlock
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   163
    "evaluate the block with a Collection of streams as first argument
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   164
     and a dictionary containing attributes as second argument,
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   165
     - a collection with a stream on a single file,
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   166
     - or a collection with streams on a directorie's files, but not recursive"
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   167
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   168
    self readStreamsDo:aBlock filterBlock:nil renameBlock:nil.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   169
!
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   170
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   171
readStreamsDo:aBlock filterBlock:oneArgFilterBlock renameBlock:renameBlock
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   172
    "evaluate the block with a Collection of streams as first argument
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   173
     and a dictionary containing attributes as second argument,
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   174
     - a collection with a stream on a single file,
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   175
     - or a collection with streams on a directories files, but not recursive"
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   176
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   177
    |attributes fn files list baseName|
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   178
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   179
    fn := self asFilename.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   180
    files := OrderedCollection new.
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   181
    list := OrderedCollection new.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   182
    attributes := self class attributes.
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   183
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   184
    fn isDirectory ifTrue:[
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   185
        attributes at:#requestDirectory put:true.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   186
        fn directoryContentsAsFilenamesDo:[:eachFilename|
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   187
            eachFilename isDirectory ifFalse:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   188
                files add:eachFilename
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   189
            ].
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   190
        ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   191
    ] ifFalse:[
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   192
        baseName := fn baseName.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   193
        (baseName includesAny:'*?[]') ifTrue:[ |directoryName|
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   194
            attributes at:#requestDirectory put:true.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   195
            directoryName := fn directory.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   196
            directoryName directoryContentsDo:[:eachFilenameString|
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   197
                (baseName match:eachFilenameString) ifTrue:[ |filename|
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   198
                    filename := directoryName construct:eachFilenameString.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   199
                    filename isDirectory ifFalse:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   200
                        files add:(directoryName construct:eachFilenameString).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   201
                    ].
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   202
                ].
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   203
            ].
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   204
        ] ifFalse:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   205
            attributes at:#requestDirectory put:false.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   206
            files add:fn.
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   207
        ].
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   208
    ].
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   209
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   210
    oneArgFilterBlock notNil ifTrue:[
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   211
        files := files select:oneArgFilterBlock
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   212
    ].
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   213
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   214
    files do:[:eachFilename| |baseName stream|
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   215
        [
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   216
            baseName := eachFilename baseName.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   217
            attributes at:#fileSize put:eachFilename fileSize.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   218
            attributes at:#baseName put:baseName.  
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   219
            (self pathSegments includes:baseName) ifTrue:[
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   220
                attributes at:#uriInfo put:self.  
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   221
            ] ifFalse:[ |uri col|
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   222
                uri := self copy.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   223
                col := self pathSegments copy.
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   224
                col removeLast.
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   225
                col add:baseName.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   226
                uri pathSegments:col.
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   227
                attributes at:#uriInfo put:uri.  
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   228
            ].
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   229
            stream := eachFilename readStream.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   230
            aBlock value:stream value:attributes.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   231
        ] ensure:[
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   232
            stream notNil ifTrue:[stream close]
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   233
        ].
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   234
2484
6f252eb387f6 Fixes for SFTP/Solaris and '~' paths
Stefan Vogel <sv@exept.de>
parents: 2474
diff changeset
   235
        renameBlock notNil ifTrue:[
6f252eb387f6 Fixes for SFTP/Solaris and '~' paths
Stefan Vogel <sv@exept.de>
parents: 2474
diff changeset
   236
            |renameFilenameString|
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   237
            renameFilenameString := renameBlock value:eachFilename pathName.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   238
            renameFilenameString asFilename exists ifTrue:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   239
                renameFilenameString := renameFilenameString, '.', 
1436
e680f637d998 Use Timestamp/#asTimestamp instead of AbsoluteTime/#asAbsoluteTime
Stefan Vogel <sv@exept.de>
parents: 1374
diff changeset
   240
                        (Timestamp now printStringFormat:'%(year)%(mon)%(day)%h%m%s').
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   241
            ].
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   242
            eachFilename moveTo:renameFilenameString.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   243
        ].
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   244
    ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   245
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   246
    "
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   247
        (URI fromString:'file:~/test/out') 
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   248
            readStreamsDo:[:stream :attributes | 
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   249
                Transcript showCR:(attributes at:#baseName).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   250
                Transcript showCR:(attributes at:#fileSize).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   251
                Transcript showCR:(attributes at:#requestDirectory).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   252
                Transcript showCR:(attributes at:#uriInfo).
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   253
            ].
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   254
        (URI fromString:'file:~/test/out/*1') 
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   255
            readStreamsDo:[:stream :attributes | 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   256
                Transcript showCR:(attributes at:#baseName).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   257
                Transcript showCR:(attributes at:#fileSize).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   258
                Transcript showCR:(attributes at:#requestDirectory).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   259
                Transcript showCR:(attributes at:#uriInfo).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   260
            ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   261
    "
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   262
!
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   263
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   264
writeStreamDo:aBlock
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   265
    "evaluate a block with the write stream as first argument
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   266
     and a dictionary containing attributes as second argument.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   267
     The stream is closed after aBlock has been evaluated.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   268
     Attributes may be the mime type (key #MIME)"
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   269
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   270
    |stream|
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   271
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   272
    ^ [
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   273
        stream := self asFilename writeStream.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   274
        aBlock value:stream value:self class attributes
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   275
     ] ensure:[
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   276
        stream notNil ifTrue:[stream close]
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   277
     ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   278
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   279
    "
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   280
        (URI fromString:'file:/home/tm/tmp') 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   281
            readStreamsDo:[:stream :attributes| 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   282
                Transcript showCR:(attributes at:#MIME).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   283
                Transcript showCR:(stream isWritable).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   284
            ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   285
    "
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   286
!
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   287
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   288
writeStreamDo:aBlock create:doCreate
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   289
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   290
    ^ self writeStreamDo:aBlock create:doCreate atomic:false.
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   291
!
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   292
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   293
writeStreamDo:aBlock create:doCreate atomic:doAtomic
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   294
    "evaluate a block with the write stream as first argument
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   295
     and a dictionary containing attributes as second argument.
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   296
     The stream is closed after aBlock has been evaluated.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   297
     Attributes may be the mime type (key #MIME)
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   298
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   299
     If doCreate is true, a nonExistent directory will be created.
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   300
     If doAtomic is true, files will appear atomically, by using
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   301
        an intermediate file theat will be renamed"
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   302
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   303
    |stream fileName toFileName|
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   304
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   305
    fileName := self asFilename.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   306
    toFileName := fileName.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   307
    doAtomic ifTrue:[
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   308
        fileName isDirectory ifFalse:[
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   309
            toFileName := fileName directory.
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   310
        ].
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   311
        toFileName := toFileName construct:'.transferFile'.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   312
    ].
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   313
    [
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   314
        Stream streamErrorSignal handle:[:ex|
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   315
            doCreate ifFalse:[
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   316
                ex reject
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   317
            ].    
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   318
            fileName directory recursiveMakeDirectory.
1284
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   319
            self exists ifTrue:[ |infoStream|
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   320
                infoStream := '' writeStream.
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   321
                self publicPrintOn:infoStream.
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   322
                self error:('Local write: Datei %1 already exists!!' bindWith:infoStream contents).
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   323
            ].
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   324
            stream := toFileName writeStream.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   325
        ] do:[
1284
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   326
            self exists ifTrue:[ |infoStream|
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   327
                infoStream := '' writeStream.
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   328
                self publicPrintOn:infoStream.
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   329
                self error:('Local write: Datei %1 already exists!!' bindWith:infoStream contents).
57550436b55b file exists error handling
tm
parents: 1271
diff changeset
   330
            ].
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   331
            stream := toFileName writeStream.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   332
        ].
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   333
        aBlock value:stream value:self class attributes.
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   334
        stream close.
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   335
        doAtomic ifTrue:[
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   336
            toFileName moveTo:fileName.
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1267
diff changeset
   337
        ]
1271
ca2e206e7c7f Working version: tilde-expansion, patterns
Stefan Vogel <sv@exept.de>
parents: 1268
diff changeset
   338
    ] ifCurtailed:[
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   339
        stream notNil ifTrue:[stream close]
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   340
    ].
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   341
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   342
    "
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   343
        (URI fromString:'file:/~') 
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   344
            readStreamsDo:[:stream :attributes|
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   345
                stream notNil ifTrue:[
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   346
                    Transcript show(attributes at:#MIME); tab; showCR:(stream isWritable).
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   347
                ].
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   348
            ].
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   349
    "
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   350
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   351
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   352
!FileURI class methodsFor:'documentation'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   353
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   354
version
2484
6f252eb387f6 Fixes for SFTP/Solaris and '~' paths
Stefan Vogel <sv@exept.de>
parents: 2474
diff changeset
   355
    ^ '$Header: /cvs/stx/stx/libbasic2/FileURI.st,v 1.16 2010-08-12 13:28:30 stefan Exp $'
2474
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   356
!
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   357
38de996b9ee0 SSH-SFTP support
Stefan Vogel <sv@exept.de>
parents: 1519
diff changeset
   358
version_CVS
2484
6f252eb387f6 Fixes for SFTP/Solaris and '~' paths
Stefan Vogel <sv@exept.de>
parents: 2474
diff changeset
   359
    ^ '$Header: /cvs/stx/stx/libbasic2/FileURI.st,v 1.16 2010-08-12 13:28:30 stefan Exp $'
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   360
! !