add webdav2archive
This commit is contained in:
		
						commit
						a42b560c59
					
				|  | @ -0,0 +1,8 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| result="$(gofmt -s -l . | grep -v '^vendor/' )" | ||||
| if [ -n "$result" ]; then | ||||
|   echo "Go code is not formatted, run 'gofmt -s -w .'" >&2 | ||||
|   echo "$result" | ||||
|   exit 1 | ||||
| fi | ||||
|  | @ -0,0 +1,25 @@ | |||
| #!/usr/bin/env python | ||||
| # checks if every desired package has test files | ||||
| 
 | ||||
| import os | ||||
| import re | ||||
| import sys | ||||
| 
 | ||||
| source_re = re.compile(".*\.go") | ||||
| test_re   = re.compile(".*_test\.go") | ||||
| missing   = False | ||||
| 
 | ||||
| for root, dirs, files in os.walk("."): | ||||
|   # ignore some paths | ||||
|   if root == "." or root.startswith("./vendor") or root.startswith("./."): | ||||
|     continue | ||||
| 
 | ||||
|   # source files but not test files? | ||||
|   if len(filter(source_re.match, files)) > 0 and len(filter(test_re.match, files)) == 0: | ||||
|     print("no test files for {}".format(root)) | ||||
|     missing = True | ||||
| 
 | ||||
| if missing: | ||||
|   sys.exit(1) | ||||
| else: | ||||
|   print("every package has test files") | ||||
|  | @ -0,0 +1,37 @@ | |||
| image: golang:latest | ||||
| stages: | ||||
|   - build | ||||
|   - test | ||||
| 
 | ||||
| before_script: | ||||
|   - mkdir -p "/go/src/dev.sum7.eu/$CI_PROJECT_NAMESPACE/" | ||||
|   - cp -R "/builds/$CI_PROJECT_PATH" "/go/src/dev.sum7.eu/$CI_PROJECT_NAMESPACE/" | ||||
|   - cd "/go/src/dev.sum7.eu/$CI_PROJECT_PATH" | ||||
|   - go get -d -t ./... | ||||
| 
 | ||||
| build-my-project: | ||||
|   stage: build | ||||
|   script: | ||||
|     - go install "dev.sum7.eu/$CI_PROJECT_PATH/..." | ||||
|     - mkdir /builds/bin/ | ||||
|     - mv /go/bin/* /builds/bin/ | ||||
|   artifacts: | ||||
|     paths: | ||||
|       - "bin/*" | ||||
| 
 | ||||
| test-my-project: | ||||
|   stage: test | ||||
|   script: | ||||
|     - go get github.com/client9/misspell/cmd/misspell | ||||
|     - misspell -error . | ||||
|     - ./.ci/check-gofmt | ||||
|     - ./.ci/check-testfiles | ||||
|     - go test $(go list ./... | grep -v /vendor/) -v -coverprofile .testCoverage.txt | ||||
|   artifacts: | ||||
|     paths: | ||||
|      - .testCoverage.txt | ||||
| 
 | ||||
| test-race-my-project: | ||||
|   stage: test | ||||
|   script: | ||||
|     - go test -race ./... | ||||
|  | @ -0,0 +1,25 @@ | |||
| # Golang Snippts | ||||
| [](https://dev.sum7.eu/genofire/golang-snippets/pipelines) | ||||
| [](https://goreportcard.com/report/dev.sum7.eu/genofire/golang-snippets) | ||||
| [](https://godoc.org/dev.sum7.eu/genofire/golang-snippets) | ||||
| 
 | ||||
| 
 | ||||
| ## webdav2archive | ||||
| Download files from webdav server and put them in order structur by mtime | ||||
| 
 | ||||
| Get Latest Version: [Download](https://dev.sum7.eu/genofire/golang-snippets/-/jobs/artifacts/master/raw/bin/webdav2archive?inline=false&job=build-my-project) | ||||
| 
 | ||||
| ``` | ||||
| Usage of webdav2archive: | ||||
|   -e string | ||||
|     	export path on local (default "download") | ||||
|   -f	delete on download | ||||
|   -h string | ||||
|     	address of webdav server (default "https://cloud.sum7.eu/remote.php/webdav/") | ||||
|   -i string | ||||
|     	import path from webdave (default "AutoUpload") | ||||
|   -p string | ||||
|     	password to auth at webdav server (use environment variable WEBDAV_PASSWORD for security reasen) | ||||
|   -u string | ||||
|     	username to auth at webdav server (default "genofire") | ||||
| ``` | ||||
|  | @ -0,0 +1,94 @@ | |||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"strconv" | ||||
| 	"sync" | ||||
| 
 | ||||
| 	"github.com/bdlm/log" | ||||
| 	"github.com/studio-b12/gowebdav" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	root     = "https://cloud.sum7.eu/remote.php/webdav/" | ||||
| 	user     = "genofire" | ||||
| 	password = os.Getenv("WEBDAV_PASSWORD") | ||||
| 
 | ||||
| 	fromDir          = "AutoUpload" | ||||
| 	exportDir        = "download" | ||||
| 	deleteOnDownload = false | ||||
| 
 | ||||
| 	client *gowebdav.Client | ||||
| 	wg     = &sync.WaitGroup{} | ||||
| ) | ||||
| 
 | ||||
| func handleFile(file os.FileInfo) { | ||||
| 	defer wg.Done() | ||||
| 
 | ||||
| 	filepath := path.Join(fromDir, file.Name()) | ||||
| 	logger := log.WithField("from", filepath) | ||||
| 
 | ||||
| 	mtime := file.ModTime() | ||||
| 
 | ||||
| 	exportpathDir := path.Join(exportDir, strconv.Itoa(mtime.Year()), fmt.Sprintf("%.2d", mtime.Month())) | ||||
| 	os.MkdirAll(exportpathDir, os.ModePerm) | ||||
| 	exportpath := path.Join(exportpathDir, file.Name()) | ||||
| 	logger = logger.WithField("to", exportpath) | ||||
| 
 | ||||
| 	reader, _ := client.ReadStream(filepath) | ||||
| 
 | ||||
| 	f, err := os.Create(exportpath) | ||||
| 	if err != nil { | ||||
| 		logger.Warnf("unable to create dest: %s", err) | ||||
| 		return | ||||
| 	} | ||||
| 	defer f.Close() | ||||
| 
 | ||||
| 	if _, err = io.Copy(f, reader); err != nil { | ||||
| 		logger.Warnf("unable to download: %s", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if deleteOnDownload { | ||||
| 		if err = client.Remove(filepath); err != nil { | ||||
| 			logger.Warnf("unable to remove: %s", err) | ||||
| 			return | ||||
| 		} | ||||
| 		logger = logger.WithField("deleted", true) | ||||
| 	} | ||||
| 
 | ||||
| 	logger.Info("downloaded") | ||||
| } | ||||
| 
 | ||||
| func main() { | ||||
| 	flag.StringVar(&user, "u", user, "username to auth at webdav server") | ||||
| 	flag.StringVar(&password, "p", password, "password to auth at webdav server (use environment variable WEBDAV_PASSWORD for security reasen)") | ||||
| 	flag.StringVar(&root, "h", root, "address of webdav server") | ||||
| 
 | ||||
| 	flag.StringVar(&fromDir, "i", fromDir, "import path from webdave") | ||||
| 	flag.StringVar(&exportDir, "e", exportDir, "export path on local") | ||||
| 	flag.BoolVar(&deleteOnDownload, "f", deleteOnDownload, "delete on download") | ||||
| 	flag.Parse() | ||||
| 
 | ||||
| 	client = gowebdav.NewClient(root, user, password) | ||||
| 
 | ||||
| 	if client == nil { | ||||
| 		log.Panic("cloud not connect to webdav client") | ||||
| 	} | ||||
| 
 | ||||
| 	files, _ := client.ReadDir(fromDir) | ||||
| 
 | ||||
| 	for _, file := range files { | ||||
| 		if file.IsDir() { | ||||
| 			continue | ||||
| 		} | ||||
| 		wg.Add(1) | ||||
| 		go handleFile(file) | ||||
| 	} | ||||
| 	wg.Wait() | ||||
| 	log.Info("done") | ||||
| } | ||||
		Loading…
	
		Reference in New Issue