diff --git a/src/Vervis/Patch.hs b/src/Vervis/Patch.hs new file mode 100644 index 0000000..71ca966 --- /dev/null +++ b/src/Vervis/Patch.hs @@ -0,0 +1,63 @@ +{- This file is part of Vervis. + - + - Written in 2018 by fr33domlover . + - + - ♡ Copying is an act of love. Please copy, reuse and share. + - + - The author(s) have dedicated all copyright and related and neighboring + - rights to this software to the public domain worldwide. This software is + - distributed without any warranty. + - + - You should have received a copy of the CC0 Public Domain Dedication along + - with this software. If not, see + - . + -} + +-- | Representation of commit in a repo for viewing. +-- +-- Each version control system has its own specific details of how repository +-- changes are represented and encoded and stored internally. This module is +-- merely a model for displaying a commit to a human viewer. +module Vervis.Patch + ( Hunk (..) + , Edit (..) + , Patch (..) + ) +where + +import Prelude + +import Data.Int (Int64) +import Data.Text (Text) +import Data.Time.Clock (UTCTime) +import Data.Word (Word32) +import Text.Email.Validate (EmailAddress) + +data Hunk = Hunk + { hunkContextBefore :: [Text] + , hunkLineNumber :: Int + , hunkOldLines :: [Text] + , hunkNewLines :: [Text] + , hunkContextAfter :: [Text] + } + +data Edit + = AddTextFile FilePath Word32 [Text] + | AddBinaryFile FilePath Word32 Int64 + | RemoveTextFile FilePath Word32 [Text] + | RemoveBinaryFile FilePath Word32 Int64 + | MoveFile FilePath Word32 FilePath Word32 + | ChmodFile FilePath Word32 Word32 + | EditTextFile FilePath [Hunk] Word32 Word32 + | EditBinaryFile FilePath Int64 Word32 Int64 Word32 + | TextToBinary FilePath [Text] Word32 Int64 Word32 + | BinaryToText FilePath Int64 Word32 [Text] Word32 + +data Patch = Patch + { patchAuthorName :: Text + , patchAuthorEmail :: EmailAddress + , patchTime :: UTCTime + , patchTitle :: Text + , patchDescription :: Text + , patchDiff :: [Edit] + } diff --git a/templates/repo/patch.hamlet b/templates/repo/patch.hamlet new file mode 100644 index 0000000..1491262 --- /dev/null +++ b/templates/repo/patch.hamlet @@ -0,0 +1,45 @@ +$# This file is part of Vervis. +$# +$# Written in 2018 by fr33domlover . +$# +$# ♡ Copying is an act of love. Please copy, reuse and share. +$# +$# The author(s) have dedicated all copyright and related and neighboring +$# rights to this software to the public domain worldwide. This software is +$# distributed without any warranty. +$# +$# You should have received a copy of the CC0 Public Domain Dedication along +$# with this software. If not, see +$# . + + + + + + +
By + + $maybe sharer <- msharer + ^{personLinkW sharer} + $nothing + #{patchAuthorName patch} +
At + #{showDate $ patchTime patch} +
Title + {#patchTitle patch} +
Description + +

#{patchDescription patch} + +$if null parents +

TODO display patch diff here +$else +

+ This commit has multiple parents, and to be honest, I'm unsure how exactly + to decide against which one to run the diff. Do I just pick the first + parent? Or otherwise somehow detect which one is the right one? Advice is + very welcome. For now, to help me find and observe such cases, I'm just + listing here the parents of the commit: +

    + $forall parent <- parents +
  1. #{parent}