Skip to content

Commit 3bd30ce

Browse files
author
ronen
committed
both work
1 parent 231997e commit 3bd30ce

File tree

11 files changed

+150
-136
lines changed

11 files changed

+150
-136
lines changed

pkg/octo-gitblit.edn

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
:workspace "/home/ronen/workspace/gitblit"
2+
:workspace "/home/ronen/octo-development/gitblit"
33
:user "admin"
44
:password "vagrant"
55
:url "https://192.168.121.22:8443/"
@@ -9,7 +9,7 @@
99
}
1010

1111
:rclone {
12-
:dest "s3:narkisr-rclone/gitblit"
12+
:dest "s3:octo-development/gitblit"
1313
}
1414
}
1515
}

src/octo/common/pull.clj

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
(ns octo.common.pull
2+
"pull backup into restore folder"
3+
(:require
4+
[clojure.string :refer (replace-first)]
5+
[octo.common.push :refer [format-]]
6+
[taoensso.timbre :as timbre]
7+
[clojure.core.strint :refer (<<)]
8+
[octo.common :refer (safe lazy-mkdir rclone-sync files)]
9+
[clojure.edn :refer (read-string)]
10+
[me.raynes.fs :as fs]
11+
[clojure.java.io :refer (file)]
12+
[taoensso.timbre :as timbre]
13+
[clojure.java.shell :refer [sh with-sh-dir]]))
14+
15+
(timbre/refer-timbre)
16+
17+
(defn parse [s] (.parse (java.text.SimpleDateFormat. format-) s))
18+
19+
(defn parent
20+
([to id]
21+
(<< "~{to}/zbackup/~{id}.zback"))
22+
([to id name]
23+
(<< "~{to}/repos/~{id}/~{name}"))
24+
)
25+
26+
(defn validate [extracted to id]
27+
(let [{:keys [total]} (read-string (slurp (<< "~{extracted}/check.edn")))
28+
restored (count (files (<< "~{to}/repos/~{id}/")))]
29+
(debug "validating restoration for" id)
30+
(when-not (== total restored)
31+
(throw (ex-info "Failed to restore found" {:found restored :expected total})))))
32+
33+
(defn restore-bundles
34+
[to id]
35+
(info "to is" to)
36+
(let [extracted (file to (.replace (.substring to 1) "pull" "sync") id "bundles")]
37+
(info "restoring bundles from" extracted)
38+
(doseq [bundle (filter #(and (.isFile %) (.endsWith (.getName %) "bundle")) (file-seq extracted))
39+
:let [name (-> bundle (.getName) (.replace ".bundle" "")) target (parent to id name)]]
40+
(when (.exists (file target)) (fs/delete-dir target))
41+
(safe "git" "clone" (.getAbsolutePath bundle) target)
42+
(with-sh-dir target (safe "git" "fsck" target)))
43+
(validate extracted to id)
44+
(fs/delete-dir extracted)))
45+
46+
(defn zbackup-restore
47+
"Restore an org/repo"
48+
[to password id]
49+
(let [base (<< "~(parent to id)/backups/")
50+
backups (filter #(.isFile %) (file-seq (file base)))
51+
latest (.getAbsolutePath (last (sort-by #(-> % (.getName) (.replace id "") parse) backups)))
52+
target (<< "~{to}/tars/~{id}.tar")]
53+
(debug "zbackup restore")
54+
(lazy-mkdir (<< "~{to}/tars"))
55+
(safe "/bin/sh" "-c" (<< "zbackup --password-file ~{password} restore ~{latest} > ~{target}"))
56+
(debug "extracting into" target)
57+
(with-sh-dir to
58+
(safe "tar" "xf" target))
59+
(lazy-mkdir (<< "~{to}/repos"))
60+
(restore-bundles to id)))
61+
62+
(defn pull
63+
[{:keys [zbackup rclone] :as m} to id]
64+
(lazy-mkdir to)
65+
(info "synching" id)
66+
(rclone-sync (<< "~(rclone :dest)/~{id}.zback") (parent to id))
67+
(info "purging" (<< "~{to}/repos/~{id}"))
68+
(fs/delete-dir (<< "~{to}/repos/~{id}"))
69+
(info "restoring" id)
70+
(when (empty? (.list (file (parent to id))))
71+
(throw (ex-info "zbackup archive is empty, fix configuration, sync and push again." {:id id})))
72+
(zbackup-restore to (zbackup :password-file) id))

src/octo/common/push.clj

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
(ns octo.common.push
2+
"push local backup remotely by using zbackup and rclone"
3+
(:require
4+
[me.raynes.fs :as fs :refer (base-name)]
5+
[clojure.core.strint :refer (<<)]
6+
[octo.common :refer (safe lazy-mkdir rclone-sync)]
7+
[clojure.java.io :refer (file)]
8+
[taoensso.timbre :as timbre]
9+
[clojure.java.shell :refer [sh with-sh-dir]]))
10+
11+
(timbre/refer-timbre)
12+
13+
(defn- run-backup
14+
[source dest password]
15+
(debug "source is" source)
16+
(safe "/bin/sh" "-c" (<< "tar c ~{source} | zbackup backup --password-file ~{password} ~{dest}")))
17+
18+
(defn- init
19+
[password dest]
20+
(safe "zbackup" "init" dest "--password-file" password))
21+
22+
(def format- "MM-dd-yyyy-HH-MM-ss")
23+
24+
(defn now [] (.format (java.text.SimpleDateFormat. format- ) (java.util.Date.)))
25+
26+
(defn zbackup-backup
27+
"Copy git backup into a zbackup based backup using backup id"
28+
[password source dest id]
29+
(when-not (.exists (file (<< "~{dest}/backups/")))
30+
(init password dest))
31+
(run-backup source (<< "~{dest}/backups/~{id}-~(now)") password))
32+
33+
(defn push
34+
[{:keys [zbackup rclone] :as m} source dest id]
35+
(lazy-mkdir dest)
36+
(info "zbackup backup" dest)
37+
(zbackup-backup (zbackup :password-file) source dest id)
38+
(info "rclone push" dest "into" (<< "~(rclone :dest)/~(base-name dest)"))
39+
(rclone-sync dest (<< "~(rclone :dest)/~(base-name dest)")))

src/octo/common/synch.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
(delete-dir bundles)
1515
(doseq [[name url] (map f (filter (partial excluded? exclude) repos))
1616
:let [dest (<< "~{parent}/~{name}") op ((or options {}) (keyword name))]]
17-
(info "synching" name)
17+
(info "synching" name url dest op)
1818
(git/upclone url dest op)
1919
(info "mirrored" name )
2020
(git/bundle parent dest name)

src/octo/core.clj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
(println "octo backup" current ",latest version is" last-version "please upgrade")
2121
(println "octo backup" current))))
2222

23-
(defn- run [[f {:keys [repos] :as m}]]
23+
(defn- run
24+
"Running through repos list if exists else just pass m"
25+
[[f {:keys [repos] :as m}]]
2426
(if repos
2527
(doseq [{:keys [user org] :as repo} repos]
2628
(info "processing:" (or user org))

src/octo/gitblit/pull.clj

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
(ns octo.gitblit.pull
2+
"pull backup into restore folder"
3+
(:require
4+
[octo.common.pull :as cp]
5+
[taoensso.timbre :as timbre]
6+
[clojure.core.strint :refer (<<)]
7+
))
8+
9+
(timbre/refer-timbre)
10+
11+
(defn pull
12+
[workspace m {:keys [user]}]
13+
(cp/pull m (<< "~{workspace}/pull") user))

src/octo/gitblit/push.clj

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,19 @@
11
(ns octo.gitblit.push
22
"push local backup remotly to the cloud"
33
(:require
4+
[octo.common.push :as cp]
45
[clojure.core.strint :refer (<<)]
5-
[octo.common :refer (safe lazy-mkdir rclone-sync)]
6-
[clojure.java.io :refer (file)]
76
[taoensso.timbre :as timbre]
8-
[clojure.java.shell :refer [sh with-sh-dir]]))
7+
))
98

109
(timbre/refer-timbre)
1110

1211
(defn parent
1312
([workspace]
1413
(<< "~{workspace}/push"))
1514
([workspace repo]
16-
(<< "~(parent workspace)/~{repo}.zback")))
17-
18-
(defn base [workspace repo]
19-
(<< "~(parent workspace repo)/backups/~{repo}"))
20-
21-
(defn- run-backup
22-
[source dest password]
23-
(safe "/bin/sh" "-c" (<< "tar c ~{source} | zbackup backup --password-file ~{password} ~{dest}")))
24-
25-
(defn- init
26-
[workspace password repo]
27-
(safe "zbackup" "init" (parent workspace repo) "--password-file" password))
28-
29-
(def format- "MM-dd-yyyy-HH-MM-ss")
30-
31-
(defn now [] (.format (java.text.SimpleDateFormat. format- ) (java.util.Date.)))
32-
33-
(defn zbackup-backup
34-
"Copy git backup into a zbackup based backup"
35-
[workspace password repo]
36-
(let [base' (base workspace repo)]
37-
(when-not (.exists (file (<< "~(parent workspace repo)/backups/")))
38-
(init workspace password repo))
39-
(run-backup (<< "~{workspace}/sync/bundles") (<< "~{base'}-~(now)") password)))
15+
(<< "~(parent workspace)/~{repo}.zback")))
4016

4117
(defn push
42-
[workspace {:keys [zbackup rclone] :as push} {:keys [user] :as m}]
43-
(lazy-mkdir (parent workspace))
44-
(info "zbackup backup" (<< "~{workspace}/sync/bundles"))
45-
(zbackup-backup workspace (zbackup :password-file) user)
46-
(info "rclone push up" user)
47-
(rclone-sync (parent workspace user) (<< "~(rclone :dest)/~{user}.zback")))
48-
18+
[workspace m {:keys [user]}]
19+
(cp/push m (<< "~{workspace}/sync/~{user}") (parent workspace user) user))

src/octo/gitblit/synch.clj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@
2020
(:body (client/get (<< "~{url}/rpc/?req=LIST_REPOSITORIES") basic))))
2121

2222
(defn synch
23-
[workspace auth m]
23+
[workspace auth {:keys [user] :as m}]
2424
(cs/synch workspace auth (merge m {
25-
:parent (<< "~{workspace}/sync") :bundles (<< "~{workspace}/sync/bundles")
26-
:repos (repos m auth) :f (fn [[url {:keys [name]}]] [(replace name ".git" "") url])
25+
:parent (<< "~{workspace}/sync/~{user}") :bundles (<< "~{workspace}/sync/~{user}/bundles")
26+
:repos (repos m auth)
27+
:f (fn [[url {:keys [name]}]] [(replace name ".git" "") (.substring (str url) 1)])
2728
})))
2829

2930
(comment

src/octo/github/pull.clj

Lines changed: 3 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,14 @@
11
(ns octo.github.pull
22
"pull backup into restore folder"
33
(:require
4-
[octo.github.push :refer [format-]]
4+
[octo.common.pull :as cp]
55
[taoensso.timbre :as timbre]
66
[clojure.core.strint :refer (<<)]
7-
[octo.common :refer (safe lazy-mkdir rclone-sync files)]
8-
[clojure.edn :refer (read-string)]
9-
[me.raynes.fs :as fs]
10-
[clojure.java.io :refer (file)]
11-
[taoensso.timbre :as timbre]
12-
[clojure.java.shell :refer [sh with-sh-dir]]))
7+
))
138

149
(timbre/refer-timbre)
1510

16-
(defn parse [s] (.parse (java.text.SimpleDateFormat. format-) s))
17-
18-
(defn parent
19-
([workspace]
20-
(<< "~{workspace}/pull") )
21-
([workspace repo]
22-
(<< "~(parent workspace)/zbackup/~{repo}.zback"))
23-
([workspace repo name]
24-
(<< "~(parent workspace)/repos/~{repo}/~{name}"))
25-
)
26-
27-
(defn validate [extracted workspace repo]
28-
(let [{:keys [total]} (read-string (slurp (<< "~{extracted}/check.edn")))
29-
restored (count (files (<< "~(parent workspace)/repos/~{repo}/")))]
30-
(debug "validating restoration for" repo)
31-
(when-not (== total restored)
32-
(throw (ex-info "Failed to restore found" {:found restored :expected total})))))
33-
34-
(defn restore-bundles
35-
[workspace repo]
36-
(let [extracted (file (parent workspace) (.substring workspace 1) "repos" repo "bundles")]
37-
(info "restoring bundles from" extracted)
38-
(doseq [bundle (filter #(and (.isFile %) (.endsWith (.getName %) "bundle")) (file-seq extracted))
39-
:let [name (-> bundle (.getName) (.replace ".bundle" "")) target (parent workspace repo name)]]
40-
(when (.exists (file target)) (fs/delete-dir target))
41-
(safe "git" "clone" (.getAbsolutePath bundle) target)
42-
(with-sh-dir target (safe "git" "fsck" target)))
43-
(validate extracted workspace repo)
44-
(fs/delete-dir extracted)))
45-
46-
(defn zbackup-restore
47-
"Restore an org/repo"
48-
[workspace password repo]
49-
(let [base (<< "~(parent workspace repo)/backups/")
50-
backups (filter #(.isFile %) (file-seq (file base)))
51-
latest (.getAbsolutePath (last (sort-by #(-> % (.getName) (.replace repo "") parse) backups)))
52-
target (<< "~(parent workspace)/tars/~{repo}.tar")]
53-
(debug "zbackup restore")
54-
(lazy-mkdir (<< "~(parent workspace)/tars"))
55-
(safe "/bin/sh" "-c" (<< "zbackup --password-file ~{password} restore ~{latest} > ~{target}"))
56-
(with-sh-dir (parent workspace)
57-
(safe "tar" "xf" target))
58-
(lazy-mkdir (<< "~(parent workspace)/repos"))
59-
(restore-bundles workspace repo)))
60-
6111
(defn pull
6212
[workspace {:keys [zbackup rclone] :as m} {:keys [org user]}]
63-
(lazy-mkdir (parent workspace))
6413
(let [repo (or org user)]
65-
(info "synching" repo)
66-
(rclone-sync (<< "~(rclone :dest)/~{repo}.zback") (parent workspace repo))
67-
(info "purging" (<< "~(parent workspace)/repos/~{repo}"))
68-
(fs/delete-dir (<< "~(parent workspace)/repos/~{repo}"))
69-
(info "restoring" repo)
70-
(when (empty? (.list (file (parent workspace repo))))
71-
(throw (ex-info "zbackup archive empty fix configuration, sync and push" {:repo repo})))
72-
(zbackup-restore workspace (zbackup :password-file) repo)))
14+
(cp/pull m (<< "~{workspace}/pull") repo)))

src/octo/github/push.clj

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
(ns octo.github.push
22
"push local backup remotely by using zbackup and rclone"
33
(:require
4+
[octo.common.push :as cp]
45
[clojure.core.strint :refer (<<)]
5-
[octo.common :refer (safe lazy-mkdir rclone-sync)]
6-
[clojure.java.io :refer (file)]
76
[taoensso.timbre :as timbre]
8-
[clojure.java.shell :refer [sh with-sh-dir]]))
7+
))
98

109
(timbre/refer-timbre)
1110

@@ -15,35 +14,11 @@
1514
([workspace repo]
1615
(<< "~(parent workspace)/~{repo}.zback")))
1716

18-
(defn base [workspace repo]
19-
(<< "~(parent workspace repo)/backups/~{repo}"))
20-
21-
(defn- run-backup
22-
[source dest password]
23-
(safe "/bin/sh" "-c" (<< "tar c ~{source} | zbackup backup --password-file ~{password} ~{dest}")))
24-
25-
(defn- init
26-
[workspace password repo]
27-
(safe "zbackup" "init" (parent workspace repo) "--password-file" password))
28-
29-
(def format- "MM-dd-yyyy-HH-MM-ss")
17+
(defn push
18+
[workspace m {:keys [org user]}]
19+
(let [repo (or org user)]
20+
(cp/push m (<< "~{workspace}/sync/~{repo}/bundles") (parent workspace repo) repo)))
3021

31-
(defn now [] (.format (java.text.SimpleDateFormat. format- ) (java.util.Date.)))
3222

33-
(defn zbackup-backup
34-
"Copy git backup into a zbackup based backup"
35-
[workspace password repo]
36-
(let [base' (base workspace repo)]
37-
(when-not (.exists (file (<< "~(parent workspace repo)/backups/")))
38-
(init workspace password repo))
39-
(run-backup (<< "~{workspace}/repos/~{repo}/bundles") (<< "~{base'}-~(now)") password)))
4023

41-
(defn push
42-
[workspace {:keys [zbackup rclone] :as m} {:keys [org user]}]
43-
(lazy-mkdir (parent workspace))
44-
(let [repo (or org user)]
45-
(info "zbackup backup" repo)
46-
(zbackup-backup workspace (zbackup :password-file) repo)
47-
(info "rclone push up" repo)
48-
(rclone-sync (parent workspace repo) (<< "~(rclone :dest)/~{repo}.zback"))))
4924

0 commit comments

Comments
 (0)