~emersion/hut-dev

export: add common writeJSON function v1 APPLIED

Simon Ser: 1
 export: add common writeJSON function

 8 files changed, 26 insertions(+), 63 deletions(-)
Export patchset (mbox)
How do I use this?

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 -3
Learn more about email & git

[PATCH] export: add common writeJSON function Export this patch

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!