-
Notifications
You must be signed in to change notification settings - Fork 0
a filter driver to expand subversion like keyword for git
License
futatuki/expandkw_filter
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
NAME
expandkw.py - a filter driver to expand subversion like keyword for git
SYNOPSIS
git config filter.expandkw.smudge 'python <script-path>/expandkw.py -s %f'
git config filter.expandkw.clean 'python <script-path>/expandkw.py -c %f'
DESCRIPTION
This is a Python script to expand/unexpand subversion like keyword act
as smudge/clean git filter driver. Please see 'filter' section in
'git help attributes' for detail how it works. This script requires
Python (tested on 2.7/3.6/3.7).
OPTIONS
-s, --smudge
Act as 'smudge' filter driver. Expand keywords enclosed by a pair
of '$' characters. This is default behavior.
-c, --clean
Act as 'clean' filter driver. Unexpand keywords enclosed by a pair
of '$' characters.
-e, --encoding
Specify target file encoding to help to parse file.
-h, --help
show option summary (and exit).
KEYWORD EXPANSION
Keyword expantion allows to embed commit information of the file.
All occurence of keywords enclosed by two '$' character like
'$Date$' are expanded to keywords with commit information, e.g.
'$Date: 2018-08-18 18:36:56 +0900 (Sun, 18 Aug 2018) $'. Fixed-length
keyword syntax like '$keyword:: $' is also available.
This filter driver provides following pre-defined keywords:
Date, LastChangeDate
Author date in local time zone, in the form
$Date: 2018-08-18 18:36:56 +0900 (Sun, 18 Aug 2018) $'.
Revision, LastChangeRevision, Rev
Abbreviated commit hash, e.g. $Revision: 6e6c9e1 $
Author, LastChangedBy
Author E-Mail address encosed by <>,
e.g. $Author: <[email protected]> $
HeadURL, URL
Full path to the file in working tree, as file:// URL.
e.g. $URL: file:///path/to/the/file $
Id
A compressd combination of file path, abbreviated commit hash,
author date in UTC, author E-Mail address, in the form
$Id: file 6e6c9e1 2018-08-10 09:36:56Z <[email protected]> $
Header
Similar to the `Id' keyword but uses file URL of the file instead
of file name base. e.g. $Header: file:///path/to/file 6e6c9e1
2018-08-10 09:36:56Z <[email protected]> $ (without folding)
CUSTOM KEYWORD
Instead to use pre-defined keywords, you can define custom keywords
by using optional module file kw_conf.py, by defining a dict
kw_conf.default_kw, its keys are keyword names and its values are
corresponding expansion format string. Note if you use kw_conf.default_kw
with pre-defined keyword above, you must redifine them in the dictionary.
Please see kw_conf.py.sample (or expandkw.py itself) for how pre-defined
keywords defined.
You can also define per file keywords by using dict kw_config.custom_kw,
its keys are file path and its values are dict of keyword name to format
string, just like kw_conf.default_kw.
In the format strings following placeholders are available.
%a author E-Mail address enclosed by <>
%b The basename of the file path
(file name without directory components)
%d Short format of the date of the commit in UTC
%D Long format of the date of the commit in local time zone,
in the form of 'Date' keyword expands.
%P The file's path, relative to the top of the repository
%r Abbreviated commit hash
%R Full path to the top of the repository, as file:// URL.
%u Full path to the file in working tree, as file:// URL.
%_ A space character. (currently as the format string is
defined as Python string literal in dict object, it allows
to contain space characters, though)
%% A percent character ('%')
%H Equivalent to '%P%_%r%_%d%_%a'.
%I Equivalent to '%b%_%r%_%d%_%a'.
BUGS
File path (URL) expansion cannot be unexpanded if its components contains
new line character or dollar sign ('$') because they are expand without
escape or quote, thus we can't parse keyword expansion boundary.
Author E-Mail address contains dollar sign also cannot be unexpanded.
When checkout file other than current branch or from commit other than
HEAD, expandkw.py cannot embed correct information. This is because
git calls filter.<driver>.smudge *before* update meta data about
current working tree, and there is no interface to pass which commit
to be checked out to smudge filter. To expand with correct information,
do 'git checkout HEAD' (or 'git checkout <current commit>') again,
after switching working tree.
SEE ALSO
git(1), gitattributes(5),
'Pro Git - 8.2 Customizing Git - Git Attributes'[1],
'Version Control with Subversion - Keyword Substitution'[2]
[1] https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes
[2] http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.keywords.html
AUTHORS
Yasuhito FUTATSUKI <[email protected]>
About
a filter driver to expand subversion like keyword for git
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published