Skip to content
This repository has been archived by the owner on Jun 12, 2024. It is now read-only.

Commit

Permalink
fix a bug with git status
Browse files Browse the repository at this point in the history
  • Loading branch information
minhtuannguyen committed Jun 13, 2016
1 parent f3a27e6 commit 334d840
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 56 deletions.
56 changes: 23 additions & 33 deletions src/leiningen/commands.clj
Original file line number Diff line number Diff line change
@@ -1,29 +1,12 @@
(ns leiningen.commands
(:refer-clojure :exclude [list])
(:require [leiningen.core.main :as m]
[clojure.string :as str]
[leiningen.project-reader :as pr]
[leiningen.utils :as u]
[leiningen.namespaces :as ns]
[leiningen.git :as git]
[leiningen.list-ns :as l]
[leiningen.tests :as t]))

(defn test-on [projects-desc project]
(u/run-command-on
(pr/->target-project-path project)
t/lein-test
project
(get projects-desc (keyword project))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn update-projects! [target-projects source-project-desc]
(let [all-target-projects-desc (pr/read-all-target-project-clj target-projects)
namespaces (u/cartesian-product (get-in source-project-desc ns/namespace-def) target-projects)
resources (u/cartesian-product (get-in source-project-desc ns/resource-def) target-projects)]
(if (not (empty? namespaces)) (ns/update-namespaces! namespaces source-project-desc all-target-projects-desc))
(if (not (empty? resources)) (ns/update-resouces! resources source-project-desc all-target-projects-desc))))
(:require [clojure.string :as str]
[leiningen.project-reader :as pr]
[leiningen.utils :as u]
[leiningen.namespaces :as ns]
[leiningen.git :as git]
[leiningen.list-ns :as l]
[leiningen.tests :as t]))

(defn pull-rebase-all! [projects _]
(-> #(u/run-command-on (pr/->target-project-path %) git/pull-rebase! %)
Expand All @@ -36,20 +19,20 @@
(git/log-git-status)))

(defn run-test [target-projects _]
(let [target-projects-desc (pr/read-all-target-project-clj target-projects)]
(-> (partial test-on target-projects-desc)
(let [target-project-desc (pr/read-all-target-project-clj target-projects)]
(-> #(u/run-command-on (pr/->target-project-path %) t/lein-test % ((keyword %) target-project-desc))
(map target-projects)
(t/log-test-hints))))

(defn commit-all! [projects _]
(let [commit-msg (->> projects
(str/join ",")
(str "\nPlease enter the commit message for the projects: ")
(u/ask-user))]
(u/ask-user))
projects-str (str/join "," projects)]
(-> #(u/run-command-on (pr/->target-project-path %) git/commit-project! % commit-msg)
(map projects)
(git/log-git-status))
(m/info "\n\n*To push : lein sync" (str/join "," projects) "--push")))
(git/log-git-status "\n*To push : lein sync" projects-str "--push"))))

(defn show-all-diff [projects _]
(-> #(u/run-command-on (pr/->target-project-path %) git/diff %)
Expand All @@ -70,7 +53,14 @@
(let [all-projects-desc (-> target-projects
(conj source-project)
(pr/read-all-target-project-clj))]
(reduce str
(map
(partial l/list-resources all-projects-desc)
[ns/namespace-def ns/resource-def]))))
(doall
(map
(partial l/list-resources all-projects-desc)
[ns/namespace-def ns/resource-def]))))

(defn update-projects! [target-projects source-project-desc]
(let [all-target-project-desc (pr/read-all-target-project-clj target-projects)
namespaces (u/cartesian-product (get-in source-project-desc ns/namespace-def) target-projects)
resources (u/cartesian-product (get-in source-project-desc ns/resource-def) target-projects)]
(if (not (empty? namespaces)) (ns/update-namespaces! namespaces source-project-desc all-target-project-desc))
(if (not (empty? resources)) (ns/update-resouces! resources source-project-desc all-target-project-desc))))
45 changes: 24 additions & 21 deletions src/leiningen/git.clj
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,24 @@

(def output-length 120)

(defn log-git-status [status]
(defn log-git-status [status & args]
(pp/print-table status)
(apply m/info args)
(m/info "\n"))

(defn status-failed []
(str "==>" :failed))

(defn get-changed-files []
(u/output-of (sh/sh "git" "diff" "--name-only") " "))

(defn unpushed-commit []
(u/output-of (sh/sh "git" "diff" "origin/master..HEAD" "--name-only")))

(defn reset-project! [project]
(if (u/is-success? (sh/sh "git" "checkout" "."))
{:project project :status :reset}
{:project project :status (str "==>" :failed)}))
{:project project :status :resetted}
{:project project :status status-failed}))

(defn diff [project]
(let [changes (get-changed-files)]
Expand All @@ -26,26 +33,22 @@

(defn pull-rebase! [project]
(let [pull-result (sh/sh "git" "pull" "-r")]
(if (not (u/is-success? pull-result))
(if (u/is-success? pull-result)
{:project project
:status (str "==>" :failed)
:cause (u/sub-str (u/error-of pull-result " ") output-length)}
:status :pulled
:details (u/sub-str (u/output-of pull-result " ") output-length)}
{:project project
:status :pulled
:details (u/sub-str (u/output-of pull-result " ") output-length)})))

(defn unpushed-commit []
(u/output-of (sh/sh "git" "diff" "origin/master..HEAD" "--name-only")))
:status status-failed
:cause (u/sub-str (u/error-of pull-result " ") output-length)})))

(defn push! [project]
(let [push-result (sh/sh "git" "push" "origin")]
(if (not (u/is-success? push-result))
(if (u/is-success? push-result)
{:project project
:status (str "==>" :failed)
:cause (u/sub-str (u/error-of push-result " ") output-length)}
:status :pushed}
{:project project
:status :pushed
:cause "Nothing to push on"})))
:status status-failed
:cause (u/sub-str (u/error-of push-result " ") output-length)})))

(defn check-and-push! [project]
(if (empty? (unpushed-commit))
Expand All @@ -56,25 +59,25 @@

(defn status [project]
(let [status-result (sh/sh "git" "status" "--short")]
(if (not (u/is-success? status-result))
{:project project :status :error}
(if (u/is-success? status-result)
{:project project
:status (if (empty? (u/output-of status-result ""))
:no-change
(u/output-of status-result " "))})))
(u/output-of status-result " "))}
{:project project :status status-failed})))

(defn commit-project! [project commit-msg]
(if (empty? (get-changed-files))
{:project project
:status :skipped
:commit-message commit-msg
:cause "No change to be committed on"}
:cause "No change to commit on"}
(let [commit-result (sh/sh "git" "commit" "-am" commit-msg)]
(if (u/is-success? commit-result)
{:project project
:status :commited
:commit-message commit-msg}
{:project project
:status (str "==>" :failed)
:status status-failed
:commit-message commit-msg
:cause (u/sub-str (u/error-of commit-result " ") output-length)}))))
3 changes: 1 addition & 2 deletions src/leiningen/list_ns.clj
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@
(m/info " - hash-value (.i.e ddfa3d66) : the namespace/resource is defined in the project.clj")
(m/info " |resource| ==> 5532BDEA | means that the hash value doesn't match on all projects\n")
(pp/print-table (sort-by :name m))
(m/info "\n")
resource-name)
(m/info "\n"))

(defn aggregate [result [namespace project]]
(let [project-occurence (if (contains? result namespace)
Expand Down

0 comments on commit 334d840

Please sign in to comment.