packages feed

git-fmt 0.2.0.1 → 0.2.0.2

raw patch · 4 files changed

+155/−4 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

+ CHANGELOG.md view
@@ -0,0 +1,64 @@+## Changelog++#### Upcoming++#### v0.2.0.2++*Revisions*++* Fixed a bug causing prettifying to fail across filesystem boundaries. ([#72](https://github.com/hjwylde/git-fmt/issues/72))++#### v0.2.0.1++*Revisions*++* Fixed a bug where passing arguments would only work when running in the git directory. ([#57](https://github.com/hjwylde/git-fmt/issues/57))++#### v0.2.0.0++*Major*++* Removed `--list-ugly` and `--dry-run` options. ([#29](https://github.com/hjwylde/git-fmt/issues/29))+* Restricted use of `--quiet` and `--verbose` at the same time. ([#35](https://github.com/hjwylde/git-fmt/issues/35))+* Updated project structure to delegate pretty printing to other binaries. ([#38](https://github.com/hjwylde/git-fmt/issues/38))+* Added a `.omniyaml.yaml` config file. ([#38](https://github.com/hjwylde/git-fmt/issues/38))++*Minor*++* Added `--mode` option (either `normal` or `dry-run`). ([#29](https://github.com/hjwylde/git-fmt/issues/29))+* Added `--null` option (use the null terminator as the delimiter for inputs). ([#27](https://github.com/hjwylde/git-fmt/issues/27))+* Added support for directories as arguments (directories include all files within recursively). ([#30](https://github.com/hjwylde/git-fmt/issues/30))+* Added parallelisation. ([#48](https://github.com/hjwylde/git-fmt/issues/48))++*Revisions*++* Added a warning for when files aren't found. ([#29](https://github.com/hjwylde/git-fmt/issues/29))+* Updated internal use of `git ls-files` to use the null terminator option. ([#27](https://github.com/hjwylde/git-fmt/issues/27))+* Fixed debug log messages to have timestamp and log level on all lines. ([#33](https://github.com/hjwylde/git-fmt/issues/33))+* Tidied up error messages from git. ([#40](https://github.com/hjwylde/git-fmt/issues/40))+* Tidied up error messages from parsing the config. ([#43](https://github.com/hjwylde/git-fmt/issues/43))++#### v0.1.0.3++*Revisions*++* Fixed a bug where passing arguments would only work when running in the git directory. ([#57](https://github.com/hjwylde/git-fmt/issues/57))++#### v0.1.0.2++*Revisions*++* Fixed a bug where UTF-8 characters in strings weren't printed properly. ([#26](https://github.com/hjwylde/git-fmt/issues/26))++#### v0.1.0.1++*Revisions*++* Fixed a bug where integers were printed as rationals. ([#25](https://github.com/hjwylde/git-fmt/issues/25))++#### v0.1.0.0++This is first release of the `git-fmt` binary!+It provides a basic syntax for formatting files in a git repository.+Currently only JSON is supported.+
+ README.md view
@@ -0,0 +1,79 @@+# git-fmt++[![Project Status: Wip - Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](http://www.repostatus.org/badges/1.0.0/wip.svg)](http://www.repostatus.org/#wip)+[![Build Status](https://travis-ci.org/hjwylde/git-fmt.svg?branch=master)](https://travis-ci.org/hjwylde/git-fmt)+[![Release](https://img.shields.io/github/release/hjwylde/git-fmt.svg)](https://github.com/hjwylde/git-fmt/releases/latest)++(Side note: the formatting component of this project will eventually be split out and named omnifmt.)++`git-fmt` adds a custom command to Git that automatically formats code by using external+    pretty-printers.+The idea was taken from [gofmt](https://golang.org/cmd/gofmt/), just with a bit of expansion to more+    languages.++Formatted code is:++* Easier to write: never worry about minor formatting concerns while hacking away.+* Easier to read: when all code looks the same you need not mentally convert others' formatting+  style into something you can understand.+* Easier to maintain: mechanical changes to the source don't cause unrelated changes to the file's+  formatting; diffs show only the real changes.+* Uncontroversial: never have a debate about spacing or brace position ever again.++(Bullet points taken from https://blog.golang.org/go-fmt-your-code.)++### Installing++Installing `git-fmt` is easiest done using either+    [stack](https://github.com/commercialhaskell/stack) (recommended) or+    [Cabal](https://github.com/haskell/cabal).+Alternatively you may download a pre-compiled binary of the+    [latest release](https://github.com/hjwylde/git-fmt/releases/latest).++**Using stack:**++```bash+stack install git-fmt+export PATH=$PATH:~/.local/bin+```++**Using Cabal:**++```bash+cabal-install git-fmt+export PATH=$PATH:~/.cabal/bin+```++### Usage++`git-fmt` itself just provides a way to select files in the git repository and pipe them through a+    pretty-printer.+It also provides a dry-run mode that will show you which files need prettifying.++#### Configuration++Configuration is done through an `.omnifmt.yaml` file in the repository's top-level directory.++To show how, here's an example `.omnifmt.yaml`:+```yaml+haskell:+    extensions: ["hs", "lhs"]+    command:    "stylish-haskell {{input}} > {{output}}"++javascript:+    extensions: ["js"]+    command:    "js-beautify {{input}} > {{output}}"++json:+    extensions: ["json"]+    command:    "json_pp < {{input}} > {{output}}"+```++That's all it takes!+Each command must declare how to read the input file and how to write to the temporary file.+The temporary file is used to compare whether the original input was pretty or ugly before writing+    to the original.++Extensions is pretty self explanatory, but if you use the same extension more than once then+    precedence goes to the first defined pretty-printer.+
git-fmt.cabal view
@@ -1,5 +1,5 @@ name:           git-fmt-version:        0.2.0.1+version:        0.2.0.2  author:         Henry J. Wylde maintainer:     public@hjwylde.com@@ -16,6 +16,8 @@ cabal-version:  >= 1.10 category:       Development build-type:     Simple++extra-source-files: CHANGELOG.md README.md  source-repository head     type:       git
src/Git/Fmt.hs view
@@ -34,16 +34,18 @@ import              Data.Yaml           (prettyPrintParseException) import              Data.Yaml.Include   (decodeFileEither) -import Git.Fmt.Config as Config+import Git.Fmt.Config   as Config import Git.Fmt.Process+import GHC.IO.Exception (IOErrorType(..))  import Prelude hiding (read)  import System.Directory.Extra hiding (withCurrentDirectory) import System.Exit import System.FilePath-import System.IO.Temp+import System.IO.Error import System.IO.Extra'+import System.IO.Temp  -- | Options. data Options = Options {@@ -118,7 +120,11 @@ normal filePath tmpFilePath = do     $(logInfo) $ T.pack (filePath ++ ": prettified") -    liftIO $ renameFile tmpFilePath filePath+    -- Try move the file, but if it's across a filesystem boundary then we may need to copy instead+    liftIO $ renameFile tmpFilePath filePath `catchIOError` \e ->+        if ioeGetErrorType e == UnsupportedOperation+            then copyFile tmpFilePath filePath >> removeFile tmpFilePath+            else ioError e  dryRun :: (MonadIO m, MonadLogger m) => FilePath -> FilePath -> m () dryRun filePath _ = $(logInfo) $ T.pack (filePath ++ ": ugly")