From: Sergio Callegari <sergio.callegari@gmail.com>
To: git@vger.kernel.org
Subject: Management of opendocument (openoffice.org) files in git
Date: Mon, 15 Sep 2008 22:40:01 +0000 (UTC) [thread overview]
Message-ID: <loom.20080915T222909-709@post.gmane.org> (raw)
Hi,
Management of opendocument files in git has been discussed a short time ago.
Here is an helper script that may help achieving better density in git packs
containg blobs from openoffice files.
To try it, save the following as "rezip" with execution permission:
-----8<-----------------------
#! /bin/bash
#
# (c) 2008 Sergio Callegari
#
# Rewrites a zip archive, possibly changing the compression level
USAGE='Usage: rezip [options] [file]
with options:
[-h | --help] Gives help
[-p ?] Lists known profiles
[--unzip_opts options] Pass options to unzip helper to read zip file
[--zip_opts options] Pass options to zip helper to write zip file
[-p | --profile profile] Get options for helpers from profile
Rewrites a zip archive, possibily changing the compression level.
If the archive name is unspecified, then the command operates like a filter,
reading from standard input and writing to standard output.
Options can be manually provided to the unzip process doing the read and to
the zip process doing the write. Alternatively a profile can be used to set
options automatically.'
PROFILES="ODF_UNCOMPRESS ODF_COMPRESS"
PROFILE_UNZIP_ODF_UNCOMPRESS='-b -qq -X'
PROFILE_ZIP_ODF_UNCOMPRESS='-q -r -D -0'
PROFILE_UNZIP_ODF_COMPRESS='-b -qq -X'
PROFILE_ZIP_ODF_COMPRESS='-q -r -D -6'
die()
{
echo "$1" >&$2
exit $3
}
UNZIP_OPTS=""
ZIP_OPTS=""
while true ; do
case "$1" in
-h | --help)
die "$USAGE" 1 0 ;;
-p | --profile)
if [ "$2" = "?" ] ; then
die "Avalilable profiles: ${PROFILES}" 1 0 ;
else
profile=$2
shift
profile_unzip=PROFILE_UNZIP_${profile}
profile_zip=PROFILE_ZIP_${profile}
UNZIP_OPTS=${!profile_unzip}
ZIP_OPTS=${!profile_zip}
fi ;;
--unzip_opts)
UNZIP_OPTS=${UNZIP_OPTS} $2
shift ;;
--zip_opts)
ZIP_OPTS=${ZIP_OPTS} $2
shift ;;
-*)
die "$USAGE" 2 1 ;;
*)
break ;;
esac
shift
done
if [ $# = 0 ] ; then
tmpcopy=$(mktemp rezip.zip.XXXXXX)
cat > $tmpcopy
filename="$tmpcopy"
else
tmpcopy=""
filename="$1"
fi
workdir=$(mktemp -d -t rezip.workdir.XXXXXX)
curdir=$(pwd)
cd $workdir
unzip $UNZIP_OPTS "$curdir/$filename"
zip $ZIP_OPTS "$curdir/$filename" .
cd $curdir
rm -fr $workdir
if [ ! -z "$tmpcopy" ] ; then
cat $filename
rm $tmpcopy
fi
--------8<------------------------
then put in your .git/config something like
[filter "opendocument"]
clean = "rezip -p ODF_UNCOMPRESS"
smudge = "rezip -p ODF_COMPRESS"
and finally set gitattributes as
*.odt filter=opendocument
*.ods filter=opendocument
*.odp filter=opendocument
Note:
with this you might experience some delay on operations like
git status
git add
git commit -a
git checkout
depending on the size of the opendocument files being tracked.
Before using on anything sensitive, please test that it does what it should.
The script should probably be made more robust against unexpected situations.
Hope it can be useful to someone.
Sergio
next reply other threads:[~2008-09-15 22:41 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-15 22:40 Sergio Callegari [this message]
2008-09-16 6:45 ` Management of opendocument (openoffice.org) files in git Matthieu Moy
2008-09-16 7:41 ` Sergio Callegari
2008-09-16 7:09 ` Johannes Sixt
2008-09-16 7:41 ` Sergio Callegari
2008-09-16 7:52 ` Johannes Sixt
2008-09-16 16:04 ` Avery Pennarun
2008-09-16 19:28 ` Stephen R. van den Berg
2008-09-16 21:13 ` Robin Rosenberg
2008-09-23 11:08 ` Peter Krefting
-- strict thread matches above, loose matches on Subject: below --
2008-09-16 6:24 Paolo Bonzini
2008-09-16 7:05 ` Sergio Callegari
2008-09-16 8:12 ` Paolo Bonzini
2008-10-02 12:52 ` Michael J Gruber
2008-10-10 8:12 ` Peter Krefting
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=loom.20080915T222909-709@post.gmane.org \
--to=sergio.callegari@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.