mirror of https://github.com/schollz/croc.git
Handling the --zip flag
This commit is contained in:
parent
4ea9a96d88
commit
ad36e21051
|
@ -75,6 +75,7 @@ type Options struct {
|
||||||
Curve string
|
Curve string
|
||||||
HashAlgorithm string
|
HashAlgorithm string
|
||||||
ThrottleUpload string
|
ThrottleUpload string
|
||||||
|
ZipFolder bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Client holds the state of the croc transfer
|
// Client holds the state of the croc transfer
|
||||||
|
@ -146,6 +147,7 @@ type FileInfo struct {
|
||||||
IsEncrypted bool `json:"e,omitempty"`
|
IsEncrypted bool `json:"e,omitempty"`
|
||||||
Symlink string `json:"sy,omitempty"`
|
Symlink string `json:"sy,omitempty"`
|
||||||
Mode os.FileMode `json:"md,omitempty"`
|
Mode os.FileMode `json:"md,omitempty"`
|
||||||
|
TempFile bool `json:"tf,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoteFileRequest requests specific bytes
|
// RemoteFileRequest requests specific bytes
|
||||||
|
@ -249,7 +251,7 @@ func isEmptyFolder(folderPath string) (bool, error) {
|
||||||
|
|
||||||
// This function retrives the important file informations
|
// This function retrives the important file informations
|
||||||
// for every file that will be transfered
|
// for every file that will be transfered
|
||||||
func GetFilesInfo(fnames []string) (filesInfo []FileInfo, emptyFolders []FileInfo, totalNumberFolders int, err error) {
|
func GetFilesInfo(fnames []string, zipfolder bool) (filesInfo []FileInfo, emptyFolders []FileInfo, totalNumberFolders int, err error) {
|
||||||
// fnames: the relativ/absolute paths of files/folders that will be transfered
|
// fnames: the relativ/absolute paths of files/folders that will be transfered
|
||||||
totalNumberFolders = 0
|
totalNumberFolders = 0
|
||||||
var paths []string
|
var paths []string
|
||||||
|
@ -283,6 +285,31 @@ func GetFilesInfo(fnames []string) (filesInfo []FileInfo, emptyFolders []FileInf
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if stat.IsDir() && zipfolder {
|
||||||
|
dest := path + ".zip"
|
||||||
|
utils.ZipDirectory(dest, path)
|
||||||
|
stat, errStat = os.Lstat(dest)
|
||||||
|
if errStat != nil {
|
||||||
|
err = errStat
|
||||||
|
return
|
||||||
|
}
|
||||||
|
absPath, errAbs = filepath.Abs(dest)
|
||||||
|
if errAbs != nil {
|
||||||
|
err = errAbs
|
||||||
|
return
|
||||||
|
}
|
||||||
|
filesInfo = append(filesInfo, FileInfo{
|
||||||
|
Name: stat.Name(),
|
||||||
|
FolderRemote: "./",
|
||||||
|
FolderSource: filepath.Dir(absPath),
|
||||||
|
Size: stat.Size(),
|
||||||
|
ModTime: stat.ModTime(),
|
||||||
|
Mode: stat.Mode(),
|
||||||
|
TempFile: true,
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if stat.IsDir() {
|
if stat.IsDir() {
|
||||||
err = filepath.Walk(absPath,
|
err = filepath.Walk(absPath,
|
||||||
func(pathName string, info os.FileInfo, err error) error {
|
func(pathName string, info os.FileInfo, err error) error {
|
||||||
|
@ -299,6 +326,7 @@ func GetFilesInfo(fnames []string) (filesInfo []FileInfo, emptyFolders []FileInf
|
||||||
Size: info.Size(),
|
Size: info.Size(),
|
||||||
ModTime: info.ModTime(),
|
ModTime: info.ModTime(),
|
||||||
Mode: info.Mode(),
|
Mode: info.Mode(),
|
||||||
|
TempFile: false,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
totalNumberFolders++
|
totalNumberFolders++
|
||||||
|
@ -316,6 +344,7 @@ func GetFilesInfo(fnames []string) (filesInfo []FileInfo, emptyFolders []FileInf
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
filesInfo = append(filesInfo, FileInfo{
|
filesInfo = append(filesInfo, FileInfo{
|
||||||
Name: stat.Name(),
|
Name: stat.Name(),
|
||||||
|
@ -324,6 +353,7 @@ func GetFilesInfo(fnames []string) (filesInfo []FileInfo, emptyFolders []FileInf
|
||||||
Size: stat.Size(),
|
Size: stat.Size(),
|
||||||
ModTime: stat.ModTime(),
|
ModTime: stat.ModTime(),
|
||||||
Mode: stat.Mode(),
|
Mode: stat.Mode(),
|
||||||
|
TempFile: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -869,6 +899,14 @@ func (c *Client) transfer() (err error) {
|
||||||
}
|
}
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
|
if c.Options.IsSender && c.SuccessfulTransfer {
|
||||||
|
for _, file := range c.FilesToTransfer {
|
||||||
|
if file.TempFile {
|
||||||
|
fmt.Println("Removing " + file.Name)
|
||||||
|
os.Remove(file.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if c.Options.Stdout && !c.Options.IsSender {
|
if c.Options.Stdout && !c.Options.IsSender {
|
||||||
pathToFile := path.Join(
|
pathToFile := path.Join(
|
||||||
|
@ -1579,7 +1617,6 @@ func (c *Client) updateState() (err error) {
|
||||||
c.FilesToTransfer[c.FilesToTransferCurrentNum].FolderSource,
|
c.FilesToTransfer[c.FilesToTransferCurrentNum].FolderSource,
|
||||||
c.FilesToTransfer[c.FilesToTransferCurrentNum].Name,
|
c.FilesToTransfer[c.FilesToTransferCurrentNum].Name,
|
||||||
)
|
)
|
||||||
|
|
||||||
c.fread, err = os.Open(pathToFile)
|
c.fread, err = os.Open(pathToFile)
|
||||||
c.numfinished = 0
|
c.numfinished = 0
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue