add Rename and Copy
This commit is contained in:
parent
e02560544b
commit
47076d6487
@ -176,6 +176,14 @@ func (c *Client) MkdirAll(path string, _ os.FileMode) error {
|
|||||||
return newPathError("MkdirAll", path, status)
|
return newPathError("MkdirAll", path, status)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) Rename(oldpath string, newpath string, overwrite bool) error {
|
||||||
|
return c.copymove("MOVE", oldpath, newpath, overwrite)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) Copy(oldpath string, newpath string, overwrite bool) error {
|
||||||
|
return c.copymove("COPY", oldpath, newpath, overwrite)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Client) Read(path string) {
|
func (c *Client) Read(path string) {
|
||||||
fmt.Println("Read " + path)
|
fmt.Println("Read " + path)
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@ func Fail(err interface{}) {
|
|||||||
fmt.Println(" RM | DELETE | DEL <PATH>")
|
fmt.Println(" RM | DELETE | DEL <PATH>")
|
||||||
fmt.Println(" MKDIR | MKCOL <PATH>")
|
fmt.Println(" MKDIR | MKCOL <PATH>")
|
||||||
fmt.Println(" MKDIRALL | MKCOLALL <PATH>")
|
fmt.Println(" MKDIRALL | MKCOLALL <PATH>")
|
||||||
|
fmt.Println(" MV | MOVE | RENAME <OLD_PATH> <NEW_PATH>")
|
||||||
|
fmt.Println(" CP | COPY <OLD_PATH> <NEW_PATH>")
|
||||||
}
|
}
|
||||||
os.Exit(-1)
|
os.Exit(-1)
|
||||||
}
|
}
|
||||||
@ -86,6 +88,20 @@ func main() {
|
|||||||
a0 := flag.Args()[0]
|
a0 := flag.Args()[0]
|
||||||
a1 := flag.Args()[1]
|
a1 := flag.Args()[1]
|
||||||
switch *m {
|
switch *m {
|
||||||
|
case "RENAME", "MV", "MOVE":
|
||||||
|
if err := c.Rename(a0, a1, true); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
} else {
|
||||||
|
fmt.Println("Rename: " + a0 + " -> " + a1)
|
||||||
|
}
|
||||||
|
|
||||||
|
case "COPY", "CP":
|
||||||
|
if err := c.Copy(a0, a1, true); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
} else {
|
||||||
|
fmt.Println("Copy: " + a0 + " -> " + a1)
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Fail(nil)
|
Fail(nil)
|
||||||
}
|
}
|
||||||
|
27
requests.go
27
requests.go
@ -84,3 +84,30 @@ func (c *Client) propfind(path string, self bool, body string, resp interface{},
|
|||||||
|
|
||||||
return parseXML(rs.Body, resp, parse)
|
return parseXML(rs.Body, resp, parse)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) copymove(method string, oldpath string, newpath string, overwrite bool) error {
|
||||||
|
rq, err := c.req(method, oldpath, nil)
|
||||||
|
if err != nil {
|
||||||
|
return newPathErrorErr(method, oldpath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
rq.Header.Add("Destination", Join(c.root, newpath))
|
||||||
|
if overwrite {
|
||||||
|
rq.Header.Add("Overwrite", "T")
|
||||||
|
} else {
|
||||||
|
rq.Header.Add("Overwrite", "F")
|
||||||
|
}
|
||||||
|
|
||||||
|
rs, err := c.c.Do(rq)
|
||||||
|
if err != nil {
|
||||||
|
return newPathErrorErr(method, oldpath, err)
|
||||||
|
}
|
||||||
|
defer rs.Body.Close()
|
||||||
|
|
||||||
|
switch rs.StatusCode {
|
||||||
|
case 201, 204:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return newPathError(method, oldpath, rs.StatusCode)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user