https://github.com/apeyroux/clean-git
Sample $HOME/.gitconfig :
filter "identity"]
[clean = clean-git -c -n Px -f Alexandre -m alex@xxxx.io -o MyORG
smudge = clean-git -s -n Px -f Alexandre -m alex@xxxx.io -o MyORG
required = true
Sample clean-git :
#! /usr/bin/env nix-shell
#! nix-shell -i "stack --nix --resolver lts-9 --install-ghc --silent runghc --package optparse-applicative --package text --" -p stack
{-# LANGUAGE OverloadedStrings #-}
import Options.Applicative
import Data.Text as T
import Data.Semigroup ((<>))
data Command = Command
name :: String
{ firstname :: String
, org :: String
, mail :: String
, clean :: Bool
, smudge :: Bool
,
}
parseExec :: Parser Command
= Command
parseExec <$> strOption
"name"
(long <> short 'n'
<> metavar "NAME"
<> help "Name")
<*> strOption
"firstname"
(long <> short 'f'
<> metavar "FIRSTNAME"
<> help "First name")
<*> strOption
"org"
(long <> short 'o'
<> metavar "ORG"
<> help "Organisation")
<*> strOption
"mail"
(long <> short 'm'
<> metavar "MAIL"
<> help "Mail")
<*> switch
"clean"
(long <> short 'c'
<> help "clean")
<*> switch
"smudge"
(long <> short 's'
<> help "smudge")
main :: IO ()
= cleanid =<< execParser opts
main where
= info (parseExec <**> helper)
opts
( fullDesc<> progDesc "git clean identity")
cleanid :: Command -> IO ()
Command name fname org mail True False) = getContents
cleanid (>>= cleanOrg
>>= cleanFirstName
>>= cleanName
>>= cleanMail
>>= putStr
where
= return $ T.unpack $ T.replace (T.pack org) "@ORG@" (T.pack stdin)
cleanOrg stdin = return $ T.unpack $ T.replace (T.pack fname) "@FIRSTNAME@" (T.pack stdin)
cleanFirstName stdin = return $ T.unpack $ T.replace (T.pack name) "@NAME@" (T.pack stdin)
cleanName stdin = return $ T.unpack $ T.replace (T.pack mail) "@MAIL@" (T.pack stdin)
cleanMail stdin
Command name fname org mail False True) = getContents
cleanid (>>= smudgeOrg
>>= smudgeFirstName
>>= smudgeName
>>= smudgeMail
>>= putStr
where
= return $ T.unpack $ T.replace "@ORG@" (T.pack org) (T.pack stdin)
smudgeOrg stdin = return $ T.unpack $ T.replace "@FIRSTNAME@" (T.pack fname) (T.pack stdin)
smudgeFirstName stdin = return $ T.unpack $ T.replace "@NAME@" (T.pack name) (T.pack stdin)
smudgeName stdin = return $ T.unpack $ T.replace "@MAIL@" (T.pack mail) (T.pack stdin)
smudgeMail stdin
Command name fname org mail False False) = return ()
cleanid (Command name fname org mail True True) = return () cleanid (
emacs.el filter=identity