Simon Ser: 1 export: add common writeJSON function 8 files changed, 26 insertions(+), 63 deletions(-)
Copy & paste the following snippet into your terminal to import this patchset into git:
curl -s https://lists.sr.ht/~emersion/hut-dev/patches/43670/mbox | git am -3Learn more about email & git
This is something we often do, so let's extract it to a shared function. --- export/builds.go | 10 +--------- export/git.go | 10 +--------- export/hg.go | 10 +--------- export/iface.go | 20 +++++++++++++++++++- export/lists.go | 9 +-------- export/meta.go | 10 +--------- export/paste.go | 10 +--------- export/todo.go | 10 +--------- 8 files changed, 26 insertions(+), 63 deletions(-) diff --git a/export/builds.go b/export/builds.go index d531144a489e..fdefcc12c585 100644 --- a/export/builds.go +++ b/export/builds.go @@ -2,7 +2,6 @@ package export import ( "context" - "encoding/json" "errors" "fmt" "io" @@ -120,12 +119,6 @@ func (ex *BuildsExporter) exportJob(ctx context.Context, job *buildssrht.Job, ba } } - file, err = os.Create(infoPath) - if err != nil { - return err - } - defer file.Close() - jobInfo := JobInfo{ Info: Info{ Service: "builds.sr.ht", @@ -136,8 +129,7 @@ func (ex *BuildsExporter) exportJob(ctx context.Context, job *buildssrht.Job, ba Tags: job.Tags, Visibility: job.Visibility, } - err = json.NewEncoder(file).Encode(&jobInfo) - if err != nil { + if err := writeJSON(infoPath, &jobInfo); err != nil { return err } diff --git a/export/git.go b/export/git.go index f127f04e63b0..7a792713e3ef 100644 --- a/export/git.go +++ b/export/git.go @@ -2,7 +2,6 @@ package export import ( "context" - "encoding/json" "fmt" "log" "net/url" @@ -80,14 +79,7 @@ func (ex *GitExporter) Export(ctx context.Context, dir string) error { Description: repo.Description, Visibility: repo.Visibility, } - - file, err := os.Create(infoPath) - if err != nil { - return err - } - err = json.NewEncoder(file).Encode(&repoInfo) - file.Close() - if err != nil { + if err := writeJSON(infoPath, &repoInfo); err != nil { return err } } diff --git a/export/hg.go b/export/hg.go index 246147135ae1..5e8696155230 100644 --- a/export/hg.go +++ b/export/hg.go @@ -2,7 +2,6 @@ package export import ( "context" - "encoding/json" "fmt" "log" "net/url" @@ -75,14 +74,7 @@ func (ex *HgExporter) Export(ctx context.Context, dir string) error { Description: repo.Description, Visibility: repo.Visibility, } - - file, err := os.Create(infoPath) - if err != nil { - return err - } - err = json.NewEncoder(file).Encode(&repoInfo) - file.Close() - if err != nil { + if err := writeJSON(infoPath, &repoInfo); err != nil { return err } } diff --git a/export/iface.go b/export/iface.go index 7d6348cba8f1..4089dd7a5f58 100644 --- a/export/iface.go +++ b/export/iface.go @@ -1,6 +1,10 @@ package export -import "context" +import ( + "context" + "encoding/json" + "os" +) const infoFilename = "info.json" @@ -20,3 +24,17 @@ type partialError struct { func (err partialError) Unwrap() error { return err.error } + +func writeJSON(filename string, v interface{}) error { + f, err := os.Create(filename) + if err != nil { + return err + } + defer f.Close() + + if err := json.NewEncoder(f).Encode(v); err != nil { + return err + } + + return f.Close() +} diff --git a/export/lists.go b/export/lists.go index 017edf747b64..ac15936cc05f 100644 --- a/export/lists.go +++ b/export/lists.go @@ -2,7 +2,6 @@ package export import ( "context" - "encoding/json" "errors" "fmt" "io" @@ -113,12 +112,6 @@ func (ex *ListsExporter) exportList(ctx context.Context, list listssrht.MailingL return err } - file, err := os.Create(infoPath) - if err != nil { - return err - } - defer file.Close() - listInfo := MailingListInfo{ Info: Info{ Service: "lists.sr.ht", @@ -128,7 +121,7 @@ func (ex *ListsExporter) exportList(ctx context.Context, list listssrht.MailingL PermitMime: list.PermitMime, RejectMime: list.RejectMime, } - if err = json.NewEncoder(file).Encode(&listInfo); err != nil { + if err := writeJSON(infoPath, &listInfo); err != nil { return err } diff --git a/export/meta.go b/export/meta.go index 2b5291ffda19..c4975bdc1835 100644 --- a/export/meta.go +++ b/export/meta.go @@ -2,7 +2,6 @@ package export import ( "context" - "encoding/json" "fmt" "os" "path" @@ -21,18 +20,11 @@ func NewMetaExporter(client *gqlclient.Client) *MetaExporter { } func (ex *MetaExporter) Export(ctx context.Context, dir string) error { - profileFile, err := os.Create(path.Join(dir, "profile.json")) - if err != nil { - return err - } - defer profileFile.Close() - me, err := metasrht.FetchMe(ex.client, ctx) if err != nil { return err } - err = json.NewEncoder(profileFile).Encode(me) - if err != nil { + if err := writeJSON(path.Join(dir, "profile.json"), me); err != nil { return err } diff --git a/export/paste.go b/export/paste.go index 1941aac1c45c..867a494eac6e 100644 --- a/export/paste.go +++ b/export/paste.go @@ -2,7 +2,6 @@ package export import ( "context" - "encoding/json" "errors" "fmt" "io" @@ -88,12 +87,6 @@ func (ex *PasteExporter) exportPaste(ctx context.Context, paste *pastesrht.Paste } } - file, err := os.Create(infoPath) - if err != nil { - return err - } - defer file.Close() - pasteInfo := PasteInfo{ Info: Info{ Service: "paste.sr.ht", @@ -101,8 +94,7 @@ func (ex *PasteExporter) exportPaste(ctx context.Context, paste *pastesrht.Paste }, Visibility: paste.Visibility, } - err = json.NewEncoder(file).Encode(&pasteInfo) - if err != nil { + if err := writeJSON(infoPath, &pasteInfo); err != nil { return err } diff --git a/export/todo.go b/export/todo.go index 80a05dd64a25..bcfd404f1961 100644 --- a/export/todo.go +++ b/export/todo.go @@ -2,7 +2,6 @@ package export import ( "context" - "encoding/json" "errors" "fmt" "io" @@ -99,20 +98,13 @@ func (ex *TodoExporter) exportTracker(ctx context.Context, tracker todosrht.Trac return err } - file, err := os.Create(infoPath) - if err != nil { - return err - } - defer file.Close() - trackerInfo := PasteInfo{ Info: Info{ Service: "todo.sr.ht", Name: tracker.Name, }, } - err = json.NewEncoder(file).Encode(&trackerInfo) - if err != nil { + if err := writeJSON(infoPath, &trackerInfo); err != nil { return err } -- 2.41.0
Rebased it on master (PasteInfo -> TrackerInfo rename) and pushed. Thanks!