summaryrefslogtreecommitdiff
path: root/update.go
diff options
context:
space:
mode:
Diffstat (limited to 'update.go')
-rw-r--r--update.go90
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)
+ }
+}