Hey,
I wanted to do something with Git and Qt, and the result was a project
which never really got off the ground. However its capable of reading
an entire Gitlog into a hash-map in the form {:hash
129412849 :commit ..}
and so on. Ẃe used it at work to provide a better alternative than
Gitweb,
and its easily extended to show filecontents and what not.
http://github.com/Lau-of-DK/gitdoc/tree/master
/Lau
On Jul 30, 11:26 pm, David Plumpton <[email protected]> wrote:
> I'm trying to find an idiomatic way to read through a text file (e.g.
> a Git history log) where an object will be represented by several
> lines of text, and when we find a line that starts a new entry we
> create the old entry and continue. For example here's my first clumsy
> attempt. Can anybody advise on how to do this in a more functional
> style?
>
> (def *line-re* #"[^\n]{1,}")
>
> (defstruct commit :id :parent :msg)
>
> (defn parse-log [filename]
> (let [text (slurp filename)
> lines (re-seq *line-re* text)]
> (with-local-vars
> [commits {}
> commit-id ""
> parent ""
> msg ""]
> (doseq [line lines]
> (if (.startsWith line "commit ")
> (do
> (if (not= @commit-id "")
> (do
> (var-set commits (conj @commits {...@commit-id (struct
> commit @commit-id @parent @msg)}))
> (var-set msg "")
> (var-set parent nil)))
> (var-set commit-id (subs line 7))))
> (if (.startsWith line "parent ")
> (var-set parent (subs line 7)))
> (if (.startsWith line " ")
> (var-set msg (str @msg "\n" (subs line 4)))))
> (var-set commits (assoc @commits @commit-id (struct commit
> @commit-id @parent @msg)))
> @commits)))
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---