 20      16      source/TvApp/src/org/droidtv/playtvapp/browse/ChannelItemView.java
 0       7       source/TvApp/src/org/droidtv/playtvapp/browse/SourceBrowser.java
 1       1       source/TvApp/src/org/droidtv/playtvapp/data/Channel.java
-5       0       source/TvApp/src/org/droidtv/playtvapp/data/Data.java
+5       0       source/TvApp/src/org/droidtv/playtvapp/data/Data.java
+LOG
 Author:Jonathan Jeurissen
 Date:1428422271
 Commit:2e99f048810717b7a49eb328cac95c87bc4691c8
 Message:[ReacTV] Renamed resource file for build issue
+END
 
 -       -       source/ReacTV/res/drawable/App_icon_original.png
 -       -       source/ReacTV/res/drawable/app_icon_original.png
 Author:Jonathan Jeurissen"
 
 )
-
-(defn get-commit-author
-  [line]
-  (if-let [ret (clojure.string/split line #":")]
-    (if (= (nth ret 0) "Author")
-      (nth ret 1))))
-(defn get-commit-date
-  [line]
-  (if-let [ret (clojure.string/split line #":")]
-    (if (= (nth ret 0) "Date")
-      (nth ret 1))))
-(defn get-commit-revision
-  [line]
-  (if-let [ret (clojure.string/split line #":")]
-    (if (= (nth ret 0) "Commit")
-      (nth ret 1))))
+;;; "Author:xxxx"
+(defn get-commit-field
+  [lst field]
+  (loop  [ls lst]
+    (if-let [line (first ls)]
+      (if-let [ret (clojure.string/split line #":" 2)]
+        (if (= (nth ret 0) field)
+          (nth ret 1)
+          (recur (rest ls)))))))
+
+
+(defn- find-index-of
+  [s lst]
+  (loop [idx 0 ls lst]
+    (if (.startsWith (first ls) s)
+      idx
+      (recur (inc idx) (rest ls)))))
+  
+(defn- get-message-start
+  [lst]
+  (find-index-of "Message:" lst))
+(defn- get-message-end
+  [lst]
+  (find-index-of "END" lst))
+
+(defn- remove-message-head
+  [s]
+  (last (clojure.string/split s #"Message:" 2)))
+
+;;; "Message:xxxx" "..." ... "END" ""
 (defn get-commit-message
-  [line]
-  (if-let [ret (clojure.string/split line #":")]
-    (if (= (nth ret 0) "Message")
-      (nth ret 1))))
+  [lst]
+  (let [s (get-message-start lst) e (get-message-end lst)]
+    (remove-message-head (apply str (map #(str % "\n") 
+                                         (drop s (take e lst))
+                                         )))))
 
 ;;; return [add delete file] vector
 (defn get-change-file

  (line-seq (java.io.BufferedReader. 
              (java.io.StringReader. 
                (:out (with-sh-dir (get-full-git-dir project-url)
                        (sh "git" "log" "--numstat" "--format=LOG%nAuthor:%an%nDate:%at%nCommit:%H%nMessage:%s")))))))

;;; 
;;; log format as:
;;; git log --numstat --format="Author:%an%nDate:%at%nCommit:%H%nMessage:%s"
;;;
(comment "
Author:lx.mao
Date:1428461520
Commit:85fa48a1409bb22b70b9d4d6173766d7777e741d
Message:[TvApp]Show channel logo and current program's thumbnail on channel list.

6       0       source/TvApp/res/layout/channel_item.xml
4       2       source/TvApp/res/values/dimens.xml

(defn is-log?
  [line]
  (.startsWith line "LOG"))

(defn get-log-seq
  [project-url ]
