1 Commits

Author SHA1 Message Date
shoopea
0d44b53277 add search
Some checks failed
CodeQL / Analyze (go) (push) Waiting to run
golangci-lint / lint (push) Has been cancelled
Units tests / test (push) Has been cancelled
2024-12-27 22:48:28 +01:00
2 changed files with 21 additions and 2 deletions

View File

@@ -21,7 +21,7 @@ jobs:
- name: Run tests - name: Run tests
run: go test -v -covermode=count -coverprofile=coverage.out run: go test -v -covermode=count -coverprofile=coverage.out
- name: Convert coverage to lcov - name: Convert coverage to lcov
uses: jandelgado/gcov2lcov-action@4e1989767862652e6ca8d3e2e61aabe6d43be28b uses: jandelgado/gcov2lcov-action@c680c0f7c7442485f1749eb2a13e54a686e76eb5
- name: Coveralls - name: Coveralls
uses: coverallsapp/github-action@643bc377ffa44ace6394b2b5d0d3950076de9f63 uses: coverallsapp/github-action@643bc377ffa44ace6394b2b5d0d3950076de9f63
with: with:

21
ftp.go
View File

@@ -11,6 +11,7 @@ import (
"io" "io"
"net" "net"
"net/textproto" "net/textproto"
"regexp"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@@ -827,7 +828,7 @@ func (c *ServerConn) CurrentDir() (string, error) {
end := strings.LastIndex(msg, "\"") end := strings.LastIndex(msg, "\"")
if start == -1 || end == -1 { if start == -1 || end == -1 {
return "", errors.New("unsuported PWD response format") return "", errors.New("unsupported PWD response format")
} }
return msg[start+1 : end], nil return msg[start+1 : end], nil
@@ -1093,6 +1094,24 @@ func (c *ServerConn) Walk(root string) *Walker {
return w return w
} }
// Search returns all the directories matching the search pattern
func (c *ServerConn) Search(pattern string) ([]string, error) {
_, message, err := c.cmd(StatusCommandOK, "SITE SEARCH %s", pattern)
if err != nil {
return nil, err
}
msgs := make([]string, 0)
re := regexp.MustCompile(`^200- (?P<Path>.*) \(.*\).*$`)
for _, msg := range strings.Split(message, "\n") {
if re.MatchString(msg) {
msgs = append(msgs, re.ReplaceAllString(msg, "${Path}"))
}
}
return msgs, nil
}
// NoOp issues a NOOP FTP command. // NoOp issues a NOOP FTP command.
// NOOP has no effects and is usually used to prevent the remote FTP server to // NOOP has no effects and is usually used to prevent the remote FTP server to
// close the otherwise idle connection. // close the otherwise idle connection.