Skip to content

Commit 6f2a1a3

Browse files
authored
feat: add download cmd (#176)
* feat: add download cmd
1 parent 402cc50 commit 6f2a1a3

File tree

7 files changed

+101
-13
lines changed

7 files changed

+101
-13
lines changed

.github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
- name: Upload
4040
uses: codecov/codecov-action@v4
4141
with:
42-
token: ${{ secrets.CODECOV_TOKEN }}
42+
token: ${{secrets.CODECOV_TOKEN}}
4343
files: ./coverage.out
4444
name: jzfs
4545
fail_ci_if_error: true

cmd/aksk.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ var createAkskCmd = &cobra.Command{
2828
Description: utils.String(desc),
2929
})
3030
if err != nil {
31-
return err
31+
return fmt.Errorf("request aksk %w", err)
3232
}
3333

3434
result, err := api.ParseCreateAkskResponse(resp)
3535
if err != nil {
36-
return err
36+
return fmt.Errorf("parser aksk response %w", err)
3737
}
3838

3939
fmt.Printf("ak %s sk %s \n", result.JSON201.AccessKey, result.JSON201.SecretKey)

cmd/uploadfiles.go cmd/files.go

+94-6
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,15 @@ var uploadCmd = &cobra.Command{
5252
return errors.New("owner and repo must be set")
5353
}
5454

55-
refName, err := cmd.Flags().GetString("refName")
55+
refName, err := cmd.Flags().GetString("ref-name")
5656
if err != nil {
5757
return err
5858
}
5959
if len(refName) == 0 {
6060
return errors.New("refName must be set")
6161
}
6262

63-
uploadPath, err := cmd.Flags().GetString("uploadPath")
63+
uploadPath, err := cmd.Flags().GetString("upload-path")
6464
if err != nil {
6565
return err
6666
}
@@ -69,7 +69,7 @@ var uploadCmd = &cobra.Command{
6969
uploadPath = "/"
7070
}
7171

72-
ignoreRootName, err := cmd.Flags().GetBool("ignoreRootName")
72+
ignoreRootName, err := cmd.Flags().GetBool("ignore-root-name")
7373
if err != nil {
7474
return err
7575
}
@@ -143,14 +143,102 @@ var uploadCmd = &cobra.Command{
143143
},
144144
}
145145

146+
// versionCmd represents the version command
147+
var downloadCmd = &cobra.Command{
148+
Use: "download",
149+
Short: "download files from server",
150+
RunE: func(cmd *cobra.Command, _ []string) error {
151+
ctx := cmd.Context()
152+
client, err := GetClient(cmd)
153+
if err != nil {
154+
return err
155+
}
156+
157+
path, err := cmd.Flags().GetString("path")
158+
if err != nil {
159+
return err
160+
}
161+
if len(path) == 0 {
162+
return errors.New("path must be set")
163+
}
164+
165+
owner, err := cmd.Flags().GetString("owner")
166+
if err != nil {
167+
return err
168+
}
169+
if len(owner) == 0 {
170+
return errors.New("owner must be set")
171+
}
172+
173+
repo, err := cmd.Flags().GetString("repo")
174+
if err != nil {
175+
return err
176+
}
177+
if len(owner) == 0 || len(repo) == 0 {
178+
return errors.New("owner and repo must be set")
179+
}
180+
181+
refName, err := cmd.Flags().GetString("ref-name")
182+
if err != nil {
183+
return err
184+
}
185+
if len(refName) == 0 {
186+
return errors.New("ref-name must be set")
187+
}
188+
189+
refType, err := cmd.Flags().GetString("ref-type")
190+
if err != nil {
191+
return err
192+
}
193+
if len(refType) == 0 {
194+
return errors.New("ref-type must be set")
195+
}
196+
197+
fileName := filepath.Base(path)
198+
output, err := cmd.Flags().GetString("output")
199+
if err != nil {
200+
return err
201+
}
202+
203+
if len(output) == 0 {
204+
fileName = output
205+
}
206+
207+
opjResp, err := client.GetObject(ctx, owner, repo, &api.GetObjectParams{
208+
// Type type indicate to retrieve from wip/branch/tag, default branch
209+
Type: api.RefType(refType),
210+
RefName: refName,
211+
Path: path,
212+
})
213+
if err != nil {
214+
return err
215+
}
216+
217+
headObj, err := api.ParseGetObjectResponse(opjResp)
218+
if err != nil {
219+
return err
220+
}
221+
222+
return os.WriteFile(fileName, headObj.Body, 0666)
223+
},
224+
}
225+
146226
func init() {
147227
rootCmd.AddCommand(uploadCmd)
148228

149229
uploadCmd.Flags().String("path", "", "path of files to upload")
150230
uploadCmd.Flags().String("owner", "", "owner")
151231
uploadCmd.Flags().String("repo", "", "repo")
152-
uploadCmd.Flags().String("refName", "main", "branch name")
153-
uploadCmd.Flags().String("uploadPath", "", "path to save in server")
232+
uploadCmd.Flags().String("ref-name", "main", "branch name")
233+
uploadCmd.Flags().String("upload-path", "", "path to save in server")
154234
uploadCmd.Flags().Bool("replace", true, "path to save in server")
155-
uploadCmd.Flags().Bool("ignoreRootName", false, "ignore root name")
235+
uploadCmd.Flags().Bool("ignore-root-name", false, "ignore root name")
236+
237+
rootCmd.AddCommand(downloadCmd)
238+
downloadCmd.Flags().String("path", "", "path of files to upload")
239+
downloadCmd.Flags().String("owner", "", "owner")
240+
downloadCmd.Flags().String("repo", "", "repo")
241+
downloadCmd.Flags().String("ref-name", "main", "branch name")
242+
downloadCmd.Flags().String("ref-type", "branch", "reference type")
243+
downloadCmd.Flags().String("output", "branch", "reference type")
156244
}

cmd/helper.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
)
1010

1111
func GetClient(cmd *cobra.Command) (*api.Client, error) {
12-
url := cmd.Flags().Lookup("url").Value.String()
12+
url := cmd.Flags().Lookup("url").Value.String() + "/api/v1"
1313
ak := cmd.Flags().Lookup("ak").Value.String()
1414
sk := cmd.Flags().Lookup("sk").Value.String()
1515

cmd/root.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ func init() {
4242
rootCmd.PersistentFlags().String("user", "", "user name")
4343
rootCmd.PersistentFlags().String("password", "", "password")
4444

45-
rootCmd.PersistentFlags().String("url", "https://127.0.0.1:34913", "url")
45+
rootCmd.PersistentFlags().String("url", "http://127.0.0.1:34913", "url")
4646

4747
}

controller/object_ctl.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ func (oct ObjectController) UploadObject(ctx context.Context, w *api.JiaozifsRes
354354

355355
err = validator.ValidateObjectPath(params.Path)
356356
if err != nil {
357-
w.BadRequest(err.Error())
357+
w.BadRequest("%s %s", params.Path, err.Error())
358358
return
359359
}
360360

controller/validator/validate_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func TestValidateUsername(t *testing.T) {
126126

127127
func TestValidateObjectPath(t *testing.T) {
128128
//Validate Obj Path
129-
validObjectPaths := []string{"path/to/object", "file.txt", "folder/file.txt", "我的图片.png", "我的文件/我的应用.exe", "私のビデオ.mp3", "/video.mp3", "/path/pic.png"}
129+
validObjectPaths := []string{"path/to/object", "/data/housing-simplified-1.csv", "file.txt", "folder/file.txt", "我的图片.png", "我的文件/我的应用.exe", "私のビデオ.mp3", "/video.mp3", "/path/pic.png"}
130130
for _, path := range validObjectPaths {
131131
err := ValidateObjectPath(path)
132132
if err != nil {

0 commit comments

Comments
 (0)