diff options
author | Laria Carolin Chabowski <laria@laria.me> | 2021-01-01 14:46:54 +0100 |
---|---|---|
committer | Laria Carolin Chabowski <laria@laria.me> | 2021-01-01 14:46:54 +0100 |
commit | 85473656174b1b1d6221d3bb76cc12fa5f7f7e8d (patch) | |
tree | 37349eee4f64781f06e8597dc4c457801eb03a47 /update.go | |
download | laria.me-85473656174b1b1d6221d3bb76cc12fa5f7f7e8d.tar.gz laria.me-85473656174b1b1d6221d3bb76cc12fa5f7f7e8d.tar.bz2 laria.me-85473656174b1b1d6221d3bb76cc12fa5f7f7e8d.zip |
Initial commit
Diffstat (limited to 'update.go')
-rw-r--r-- | update.go | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/update.go b/update.go new file mode 100644 index 0000000..82024b7 --- /dev/null +++ b/update.go @@ -0,0 +1,90 @@ +package main + +import ( + "database/sql" + "log" + "net/http" + "net/url" + "os" + "path" + "path/filepath" + + "code.laria.me/laria.me/article" + "code.laria.me/laria.me/config" + "code.laria.me/laria.me/environment" +) + +func allArticlesFromDir(dir string) ([]article.Article, error) { + log.Printf("allArticlesFromDir(%s)", dir) + f, err := os.Open(dir) + if err != nil { + return nil, err + } + defer f.Close() + + infos, err := f.Readdir(-1) + if err != nil { + return nil, err + } + + articles := make([]article.Article, 0) + + for _, info := range infos { + if info.IsDir() { + continue + } + + fullname := filepath.Join(dir, info.Name()) + a, err := article.LoadArticle(fullname) + if err != nil { + return nil, err + } + + articles = append(articles, a) + } + + return articles, nil +} + +func updateArticles(conf *config.Config, db *sql.DB) { + articles, err := allArticlesFromDir(path.Join(conf.ContentRoot, "articles")) + if err != nil { + log.Fatalf("allArticlesFromDir(): %s", err) + } + + slugs := make([]string, 0, len(articles)) + for _, article := range articles { + if _, err = article.SaveToDb(db); err != nil { + log.Fatalf("SaveToDb: %s", err) + } + + slugs = append(slugs, article.Slug) + } + + if err = article.DeleteArticlesFromDbExcept(db, slugs); err != nil { + log.Fatalf("DeleteArticlesFromDbExcept: %s", err) + } +} + +func cmdUpdate(progname string, env *environment.Env, args []string) { + conf, err := env.Config() + if err != nil { + log.Fatalf("env.Config() failed: %s", err) + } + + db, err := env.DB() + if err != nil { + log.Fatalf("env.Config() failed: %s", err) + } + + updateArticles(conf, db) + + resp, err := http.PostForm(conf.UpdateUrl, url.Values{"secret": {conf.Secret}}) + if err != nil { + log.Fatalf("triggering server update failed: %s", err) + } + + if resp.StatusCode != 200 { + log.Fatalf("server update unexpectedly responded with %d %s", resp.StatusCode, resp.Status) + } +} |