Simon Ser: 4 export: print service name outside of Export function export: drop Exporter.Name export: drop Exporter.BaseURL export: return cobra.Command directly 24 files changed, 54 insertions(+), 116 deletions(-)
Pushed the whole series. Thanks!
Copy & paste the following snippet into your terminal to import this patchset into git:
curl -s https://lists.sr.ht/~emersion/hut-dev/patches/43254/mbox | git am -3Learn more about email & git
Deduplicate the logic a bit. No functional change. --- export.go | 2 ++ export/builds.go | 1 - export/git.go | 2 -- export/hg.go | 2 -- export/lists.go | 1 - export/meta.go | 2 -- export/paste.go | 1 - 7 files changed, 2 insertions(+), 9 deletions(-) diff --git a/export.go b/export.go index 1c29b28f3aa7..cd3417c2d017 100644 --- a/export.go +++ b/export.go @@ -57,6 +57,8 @@ func newExportCommand() *cobra.Command { log.Println("Exporting account data...") for _, ex := range exporters { + log.Println(ex.Name()) + base := path.Join(args[0], ex.Name()) if err := os.MkdirAll(base, 0o755); err != nil { log.Fatalf("Failed to create export directory: %s", err.Error()) diff --git a/export/builds.go b/export/builds.go index 0444752fdfcd..0e751e97d7e0 100644 --- a/export/builds.go +++ b/export/builds.go @@ -51,7 +51,6 @@ type JobInfo struct { } func (ex *BuildsExporter) Export(ctx context.Context, dir string) error { - log.Println("builds.sr.ht") var cursor *buildssrht.Cursor var ret error diff --git a/export/git.go b/export/git.go index 9915f37bfddb..47744fc9272a 100644 --- a/export/git.go +++ b/export/git.go @@ -41,8 +41,6 @@ type GitRepoInfo struct { } func (ex *GitExporter) Export(ctx context.Context, dir string) error { - log.Println("git.sr.ht") - settings, err := gitsrht.SshSettings(ex.client, ctx) if err != nil { return err diff --git a/export/hg.go b/export/hg.go index 6dd27b46a94c..64091c86d296 100644 --- a/export/hg.go +++ b/export/hg.go @@ -41,8 +41,6 @@ type HgRepoInfo struct { } func (ex *HgExporter) Export(ctx context.Context, dir string) error { - log.Println("hg.sr.ht") - baseURL, err := url.Parse(ex.BaseURL()) if err != nil { panic(err) diff --git a/export/lists.go b/export/lists.go index cb9f431ab606..58286e262475 100644 --- a/export/lists.go +++ b/export/lists.go @@ -57,7 +57,6 @@ type MailingListInfo struct { } func (ex *ListsExporter) Export(ctx context.Context, dir string) error { - log.Println("lists.sr.ht") var cursor *listssrht.Cursor var ret error diff --git a/export/meta.go b/export/meta.go index 83e11e89ca76..48aa8963832f 100644 --- a/export/meta.go +++ b/export/meta.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "fmt" - "log" "os" "path" @@ -31,7 +30,6 @@ func (ex *MetaExporter) BaseURL() string { } func (ex *MetaExporter) Export(ctx context.Context, dir string) error { - log.Println("meta.sr.ht") profileFile, err := os.Create(path.Join(dir, "profile.json")) if err != nil { return err diff --git a/export/paste.go b/export/paste.go index f24f67c920aa..daae8f242558 100644 --- a/export/paste.go +++ b/export/paste.go @@ -48,7 +48,6 @@ type PasteInfo struct { } func (ex *PasteExporter) Export(ctx context.Context, dir string) error { - log.Println("paste.sr.ht") var cursor *pastesrht.Cursor var ret error -- 2.41.0
No need for this to be part of the interface. No functional change. --- export.go | 32 ++++++++++++++++++-------------- export/builds.go | 4 ---- export/git.go | 4 ---- export/hg.go | 4 ---- export/iface.go | 1 - export/lists.go | 4 ---- export/meta.go | 4 ---- export/paste.go | 4 ---- 8 files changed, 18 insertions(+), 39 deletions(-) diff --git a/export.go b/export.go index cd3417c2d017..7c030f1ba6c3 100644 --- a/export.go +++ b/export.go @@ -18,35 +18,40 @@ type ExportInfo struct { Date time.Time `json:"date"` } +type exporter struct { + export.Exporter + Name string +} + func newExportCommand() *cobra.Command { run := func(cmd *cobra.Command, args []string) { - var exporters []export.Exporter + var exporters []exporter // TODO: Allow exporting a subset of all services (maybe meta should // provide a list of services configured for that instance?) mc := createClient("meta", cmd) meta := export.NewMetaExporter(mc.Client, mc.BaseURL) - exporters = append(exporters, meta) + exporters = append(exporters, exporter{meta, "meta.sr.ht"}) gc := createClient("git", cmd) git := export.NewGitExporter(gc.Client, gc.BaseURL) - exporters = append(exporters, git) + exporters = append(exporters, exporter{git, "git.sr.ht"}) hc := createClient("hg", cmd) hg := export.NewHgExporter(hc.Client, hc.BaseURL) - exporters = append(exporters, hg) + exporters = append(exporters, exporter{hg, "hg.sr.ht"}) bc := createClient("builds", cmd) builds := export.NewBuildsExporter(bc.Client, bc.BaseURL, bc.HTTP) - exporters = append(exporters, builds) + exporters = append(exporters, exporter{builds, "builds.sr.ht"}) pc := createClient("paste", cmd) paste := export.NewPasteExporter(pc.Client, pc.BaseURL, pc.HTTP) - exporters = append(exporters, paste) + exporters = append(exporters, exporter{paste, "paste.sr.ht"}) lc := createClient("lists", cmd) lists := export.NewListsExporter(lc.Client, lc.BaseURL, lc.HTTP) - exporters = append(exporters, lists) + exporters = append(exporters, exporter{lists, "lists.sr.ht"}) if _, ok := os.LookupEnv("SSH_AUTH_SOCK"); !ok { log.Println("Warning! SSH_AUTH_SOCK is not set in your environment.") @@ -57,32 +62,31 @@ func newExportCommand() *cobra.Command { log.Println("Exporting account data...") for _, ex := range exporters { - log.Println(ex.Name()) + log.Println(ex.Name) - base := path.Join(args[0], ex.Name()) + base := path.Join(args[0], ex.Name) if err := os.MkdirAll(base, 0o755); err != nil { log.Fatalf("Failed to create export directory: %s", err.Error()) } stamp := path.Join(base, "export-stamp.json") if _, err := os.Stat(stamp); err == nil { - log.Printf("Skipping %s (already exported)", ex.Name()) + log.Printf("Skipping %s (already exported)", ex.Name) continue } if err := ex.Export(ctx, base); err != nil { - log.Printf("Error exporting %s: %s", ex.Name(), err.Error()) + log.Printf("Error exporting %s: %s", ex.Name, err.Error()) continue } info := ExportInfo{ Instance: ex.BaseURL(), - Service: ex.Name(), + Service: ex.Name, Date: time.Now().UTC(), } if err := writeExportStamp(stamp, &info); err != nil { - log.Printf("Error writing stamp for %s: %s", - ex.Name(), err.Error()) + log.Printf("Error writing stamp for %s: %s", ex.Name, err.Error()) } } log.Println("Export complete.") diff --git a/export/builds.go b/export/builds.go index 0e751e97d7e0..ed8b8f05b3c2 100644 --- a/export/builds.go +++ b/export/builds.go @@ -34,10 +34,6 @@ func NewBuildsExporter(client *gqlclient.Client, baseURL string, http *http.Clie } } -func (ex *BuildsExporter) Name() string { - return "builds.sr.ht" -} - func (ex *BuildsExporter) BaseURL() string { return ex.baseURL } diff --git a/export/git.go b/export/git.go index 47744fc9272a..9849ffe52c96 100644 --- a/export/git.go +++ b/export/git.go @@ -24,10 +24,6 @@ func NewGitExporter(client *gqlclient.Client, baseURL string) *GitExporter { return &GitExporter{client, baseURL} } -func (ex *GitExporter) Name() string { - return "git.sr.ht" -} - func (ex *GitExporter) BaseURL() string { return ex.baseURL } diff --git a/export/hg.go b/export/hg.go index 64091c86d296..a417972bd46a 100644 --- a/export/hg.go +++ b/export/hg.go @@ -24,10 +24,6 @@ func NewHgExporter(client *gqlclient.Client, baseURL string) *HgExporter { return &HgExporter{client, baseURL} } -func (ex *HgExporter) Name() string { - return "hg.sr.ht" -} - func (ex *HgExporter) BaseURL() string { return ex.baseURL } diff --git a/export/iface.go b/export/iface.go index 42e9edd7f0a7..0f889530c44f 100644 --- a/export/iface.go +++ b/export/iface.go @@ -3,7 +3,6 @@ package export import "context" type Exporter interface { - Name() string BaseURL() string Export(ctx context.Context, dir string) error } diff --git a/export/lists.go b/export/lists.go index 58286e262475..5bf04b56cedd 100644 --- a/export/lists.go +++ b/export/lists.go @@ -39,10 +39,6 @@ func NewListsExporter(client *gqlclient.Client, baseURL string, } } -func (ex *ListsExporter) Name() string { - return "lists.sr.ht" -} - func (ex *ListsExporter) BaseURL() string { return ex.baseURL } diff --git a/export/meta.go b/export/meta.go index 48aa8963832f..a14a2814fb10 100644 --- a/export/meta.go +++ b/export/meta.go @@ -21,10 +21,6 @@ func NewMetaExporter(client *gqlclient.Client, baseURL string) *MetaExporter { return &MetaExporter{client, baseURL} } -func (ex *MetaExporter) Name() string { - return "meta.sr.ht" -} - func (ex *MetaExporter) BaseURL() string { return ex.baseURL } diff --git a/export/paste.go b/export/paste.go index daae8f242558..b8d567a056c3 100644 --- a/export/paste.go +++ b/export/paste.go @@ -35,10 +35,6 @@ func NewPasteExporter(client *gqlclient.Client, baseURL string, } } -func (ex *PasteExporter) Name() string { - return "paste.sr.ht" -} - func (ex *PasteExporter) BaseURL() string { return ex.baseURL } -- 2.41.0
No need for this to be part of the interface. No functional change. --- export.go | 25 +++++++++++++------------ export/builds.go | 16 +++++----------- export/git.go | 6 +----- export/hg.go | 6 +----- export/iface.go | 1 - export/lists.go | 17 +++++------------ export/meta.go | 11 +++-------- export/paste.go | 17 +++++------------ 8 files changed, 33 insertions(+), 66 deletions(-) diff --git a/export.go b/export.go index 7c030f1ba6c3..61c9fc6ac1e7 100644 --- a/export.go +++ b/export.go @@ -20,7 +20,8 @@ type ExportInfo struct { type exporter struct { export.Exporter - Name string + Name string + BaseURL string } func newExportCommand() *cobra.Command { @@ -30,28 +31,28 @@ func newExportCommand() *cobra.Command { // TODO: Allow exporting a subset of all services (maybe meta should // provide a list of services configured for that instance?) mc := createClient("meta", cmd) - meta := export.NewMetaExporter(mc.Client, mc.BaseURL) - exporters = append(exporters, exporter{meta, "meta.sr.ht"}) + meta := export.NewMetaExporter(mc.Client) + exporters = append(exporters, exporter{meta, "meta.sr.ht", mc.BaseURL}) gc := createClient("git", cmd) git := export.NewGitExporter(gc.Client, gc.BaseURL) - exporters = append(exporters, exporter{git, "git.sr.ht"}) + exporters = append(exporters, exporter{git, "git.sr.ht", gc.BaseURL}) hc := createClient("hg", cmd) hg := export.NewHgExporter(hc.Client, hc.BaseURL) - exporters = append(exporters, exporter{hg, "hg.sr.ht"}) + exporters = append(exporters, exporter{hg, "hg.sr.ht", hc.BaseURL}) bc := createClient("builds", cmd) - builds := export.NewBuildsExporter(bc.Client, bc.BaseURL, bc.HTTP) - exporters = append(exporters, exporter{builds, "builds.sr.ht"}) + builds := export.NewBuildsExporter(bc.Client, bc.HTTP) + exporters = append(exporters, exporter{builds, "builds.sr.ht", bc.BaseURL}) pc := createClient("paste", cmd) - paste := export.NewPasteExporter(pc.Client, pc.BaseURL, pc.HTTP) - exporters = append(exporters, exporter{paste, "paste.sr.ht"}) + paste := export.NewPasteExporter(pc.Client, pc.HTTP) + exporters = append(exporters, exporter{paste, "paste.sr.ht", pc.BaseURL}) lc := createClient("lists", cmd) - lists := export.NewListsExporter(lc.Client, lc.BaseURL, lc.HTTP) - exporters = append(exporters, exporter{lists, "lists.sr.ht"}) + lists := export.NewListsExporter(lc.Client, lc.HTTP) + exporters = append(exporters, exporter{lists, "lists.sr.ht", lc.BaseURL}) if _, ok := os.LookupEnv("SSH_AUTH_SOCK"); !ok { log.Println("Warning! SSH_AUTH_SOCK is not set in your environment.") @@ -81,7 +82,7 @@ func newExportCommand() *cobra.Command { } info := ExportInfo{ - Instance: ex.BaseURL(), + Instance: ex.BaseURL, Service: ex.Name, Date: time.Now().UTC(), } diff --git a/export/builds.go b/export/builds.go index ed8b8f05b3c2..f5c6e1ac0ef6 100644 --- a/export/builds.go +++ b/export/builds.go @@ -19,25 +19,19 @@ import ( ) type BuildsExporter struct { - client *gqlclient.Client - http *http.Client - baseURL string + client *gqlclient.Client + http *http.Client } -func NewBuildsExporter(client *gqlclient.Client, baseURL string, http *http.Client) *BuildsExporter { +func NewBuildsExporter(client *gqlclient.Client, http *http.Client) *BuildsExporter { newHttp := *http newHttp.Timeout = 10 * time.Minute // XXX: Sane default? return &BuildsExporter{ - client: client, - baseURL: baseURL, - http: &newHttp, + client: client, + http: &newHttp, } } -func (ex *BuildsExporter) BaseURL() string { - return ex.baseURL -} - type JobInfo struct { Id int32 `json:"id"` Status string `json:"status"` diff --git a/export/git.go b/export/git.go index 9849ffe52c96..495e1909df5a 100644 --- a/export/git.go +++ b/export/git.go @@ -24,10 +24,6 @@ func NewGitExporter(client *gqlclient.Client, baseURL string) *GitExporter { return &GitExporter{client, baseURL} } -func (ex *GitExporter) BaseURL() string { - return ex.baseURL -} - // A subset of gitsrht.Repository which only contains the fields we want to // export (i.e. the ones filled in by the GraphQL query) type GitRepoInfo struct { @@ -43,7 +39,7 @@ func (ex *GitExporter) Export(ctx context.Context, dir string) error { } sshUser := settings.Settings.SshUser - baseURL, err := url.Parse(ex.BaseURL()) + baseURL, err := url.Parse(ex.baseURL) if err != nil { panic(err) } diff --git a/export/hg.go b/export/hg.go index a417972bd46a..0658235f9f70 100644 --- a/export/hg.go +++ b/export/hg.go @@ -24,10 +24,6 @@ func NewHgExporter(client *gqlclient.Client, baseURL string) *HgExporter { return &HgExporter{client, baseURL} } -func (ex *HgExporter) BaseURL() string { - return ex.baseURL -} - // A subset of hgsrht.Repository which only contains the fields we want to // export (i.e. the ones filled in by the GraphQL query) type HgRepoInfo struct { @@ -37,7 +33,7 @@ type HgRepoInfo struct { } func (ex *HgExporter) Export(ctx context.Context, dir string) error { - baseURL, err := url.Parse(ex.BaseURL()) + baseURL, err := url.Parse(ex.baseURL) if err != nil { panic(err) } diff --git a/export/iface.go b/export/iface.go index 0f889530c44f..b8f9557f4d98 100644 --- a/export/iface.go +++ b/export/iface.go @@ -3,7 +3,6 @@ package export import "context" type Exporter interface { - BaseURL() string Export(ctx context.Context, dir string) error } diff --git a/export/lists.go b/export/lists.go index 5bf04b56cedd..684d93048b11 100644 --- a/export/lists.go +++ b/export/lists.go @@ -18,13 +18,11 @@ import ( ) type ListsExporter struct { - client *gqlclient.Client - http *http.Client - baseURL string + client *gqlclient.Client + http *http.Client } -func NewListsExporter(client *gqlclient.Client, baseURL string, - http *http.Client) *ListsExporter { +func NewListsExporter(client *gqlclient.Client, http *http.Client) *ListsExporter { newHttp := *http // XXX: Is this a sane default? Maybe large lists or slow // connections could require more. Would be nice to ensure a @@ -33,16 +31,11 @@ func NewListsExporter(client *gqlclient.Client, baseURL string, // headers to be able to resume this on failure or interruption. newHttp.Timeout = 10 * time.Minute return &ListsExporter{ - client: client, - http: &newHttp, - baseURL: baseURL, + client: client, + http: &newHttp, } } -func (ex *ListsExporter) BaseURL() string { - return ex.baseURL -} - // A subset of listssrht.MailingList which only contains the fields we want to // export (i.e. the ones filled in by the GraphQL query) type MailingListInfo struct { diff --git a/export/meta.go b/export/meta.go index a14a2814fb10..2b5291ffda19 100644 --- a/export/meta.go +++ b/export/meta.go @@ -13,16 +13,11 @@ import ( ) type MetaExporter struct { - client *gqlclient.Client - baseURL string + client *gqlclient.Client } -func NewMetaExporter(client *gqlclient.Client, baseURL string) *MetaExporter { - return &MetaExporter{client, baseURL} -} - -func (ex *MetaExporter) BaseURL() string { - return ex.baseURL +func NewMetaExporter(client *gqlclient.Client) *MetaExporter { + return &MetaExporter{client} } func (ex *MetaExporter) Export(ctx context.Context, dir string) error { diff --git a/export/paste.go b/export/paste.go index b8d567a056c3..2a7552edb6db 100644 --- a/export/paste.go +++ b/export/paste.go @@ -18,27 +18,20 @@ import ( ) type PasteExporter struct { - client *gqlclient.Client - http *http.Client - baseURL string + client *gqlclient.Client + http *http.Client } -func NewPasteExporter(client *gqlclient.Client, baseURL string, - http *http.Client) *PasteExporter { +func NewPasteExporter(client *gqlclient.Client, http *http.Client) *PasteExporter { // XXX: Is this a sane default? newHttp := *http newHttp.Timeout = 10 * time.Minute return &PasteExporter{ - client: client, - http: &newHttp, - baseURL: baseURL, + client: client, + http: &newHttp, } } -func (ex *PasteExporter) BaseURL() string { - return ex.baseURL -} - type PasteInfo struct { Visibility pastesrht.Visibility `json:"visibility"` } -- 2.41.0
No need for an intermediate variable here. --- export.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/export.go b/export.go index 61c9fc6ac1e7..2acfd7e35ba8 100644 --- a/export.go +++ b/export.go @@ -92,7 +92,7 @@ func newExportCommand() *cobra.Command { } log.Println("Export complete.") } - cmd := &cobra.Command{ + return &cobra.Command{ Use: "export <directory>", Short: "Exports your account data", Args: cobra.ExactArgs(1), @@ -101,7 +101,6 @@ func newExportCommand() *cobra.Command { }, Run: run, } - return cmd } func writeExportStamp(path string, info *ExportInfo) error { -- 2.41.0
Pushed the whole series. Thanks!