Filter for uncompressed storage of zipped document formats like docx (http://stackoverflow.com/questions/3298525/version-control-for-docx-and-pdf)
Martin Geisler
mg at aragost.com
Thu May 12 17:11:55 UTC 2011
Andreas Gobell <andreasgobell at gmx.de> writes:
> Thanks for the positive comments.
>
> I created the repository https://bitbucket.org/gobell/hg-zipdoc/, the
> http://mercurial.selenic.com/wiki/ZipdocExtension and made an entry in
> http://mercurial.selenic.com/wiki/UsingExtension.
It looks great!
> I renamed the extension to zipdoc - it sounds better and reflects that
> it is really just a filter processing zip files and is just intended
> to be used for zipped document formats. It works for any zip file
> including regular zips.
>
> To improve the extension I added error handling when the file passed
> to the filter is not a zip file or is broken. I think a common case
> would be if a symlink to a zip is version controlled.
>
> try:
> uncompressedDoc = zipfile.ZipFile(memoryInFile, "r")
> except zipfile.BadZipfile:
> userInterface = ui.ui()
> userInterface.note(_("zipdoc: Skipped decode due to bad ZIP archive. Either the file is not a ZIP (might be a link to a ZIP file) or the archive is broken.\n"))
> return s
You should wrap such long strings to make the soruce easier to read:
userInterface.note(_("zipdoc: Skipped decode due to bad ZIP archive. "
"Either the file is not a ZIP (might be a link "
" to a ZIP file) or the archive is broken.\n"))
(Python automatically joins adjacent string literals, just like in C.)
> Is this the correct way to obtain a reference to the ui object?
Not really -- you get a reference to a new ui object like this.
> Is it possible to get the name/path of the file that is passed to the
> filter so I can give better user feedback by including the file
> concerned by the message?
Yeah, your filter is called like this in localrepo._filter:
data = fn(data, cmd, ui=self.ui, repo=self, filename=filename)
This means that your kwargs have ui, repo, and filename keys. That also
explains where to get the right ui object from -- just change
def zipdocdecode(s, cmd, **kwargs):
to
def zipdocdecode(s, cmd, ui, repo, filename):
--
Martin Geisler
aragost Trifork
Professional Mercurial support
http://mercurial.aragost.com/kick-start/
More information about the Mercurial
mailing list