Work around apparent bug in lsof 4.88's -F output format.
This commit is contained in:
parent
03edf308a3
commit
63fa5c0782
4 changed files with 54 additions and 5 deletions
|
@ -93,11 +93,15 @@ parseFormatted s = bundle $ go [] $ lines s
|
|||
_ -> parsefail
|
||||
|
||||
parsefiles c [] = (c, [])
|
||||
parsefiles c (l:ls) = case splitnull l of
|
||||
['a':mode, 'n':file, ""] ->
|
||||
parsefiles ((file, parsemode mode):c) ls
|
||||
(('p':_):_) -> (c, l:ls)
|
||||
_ -> parsefail
|
||||
parsefiles c (l:ls) = parsefiles' c (splitnull l) l ls
|
||||
|
||||
parsefiles' c ['a':mode, 'n':file, ""] _ ls =
|
||||
parsefiles ((file, parsemode mode):c) ls
|
||||
parsefiles' c (('p':_):_) l ls = (c, l:ls)
|
||||
-- Some buggy versions of lsof emit a f field
|
||||
-- that was not requested, so ignore it.
|
||||
parsefiles' c (('f':_):rest) l ls = parsefiles' c rest l ls
|
||||
parsefiles' _ _ _ _ = parsefail
|
||||
|
||||
parsemode ('r':_) = OpenReadOnly
|
||||
parsemode ('w':_) = OpenWriteOnly
|
||||
|
|
1
debian/changelog
vendored
1
debian/changelog
vendored
|
@ -6,6 +6,7 @@ git-annex (5.20141126) UNRELEASED; urgency=medium
|
|||
* proxy: New command for direct mode repositories, allows bypassing
|
||||
the direct mode guard in a safe way to do all sorts of things
|
||||
including git revert, git mv, git checkout ...
|
||||
* Work around apparent bug in lsof 4.88's -F output format.
|
||||
* Debian package is now maintained by Gergely Nagy.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Mon, 10 Nov 2014 15:31:55 -0400
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
lsof got updated to version 4.88 some days ago (in archlinux) and since then the assistant reports the Committer crashed while parsing lsof output.
|
||||
|
||||
After reverting to the previous version (4.87), it's working fine.
|
||||
|
||||
> [[fixed|done]] --[[Joey]]
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 3"""
|
||||
date="2014-11-12T21:27:48Z"
|
||||
content="""
|
||||
|
||||
cat > ~/tmp/dir/foo &
|
||||
lsof -F0can +d ~/tmp/dir
|
||||
|
||||
Old:
|
||||
|
||||
<pre>
|
||||
p15304^@ccat^@
|
||||
aw^@n/home/joey/tmp/dir/foo^@
|
||||
</pre>
|
||||
|
||||
New:
|
||||
|
||||
</pre>
|
||||
p15304^@ccat^@
|
||||
f1^@aw^@n/home/joey/tmp/dir/foo^@
|
||||
p15399^@clsof^@
|
||||
f1^@aw^@npipe^@
|
||||
f4^@aw^@npipe^@
|
||||
f5^@ar^@npipe^@
|
||||
p15401^@cless^@
|
||||
f0^@ar^@npipe^@
|
||||
p15402^@clsof^@
|
||||
f3^@ar^@npipe^@
|
||||
f6^@aw^@npipe^@
|
||||
</pre>
|
||||
|
||||
It looks like the new lsof has broken/changed -F; the file descriptor field
|
||||
is being showed even though -F0can does not request it.
|
||||
|
||||
IMHO this is a bug in lsof.
|
||||
|
||||
Additionally, the new lsof shows processes that have open pipes, even
|
||||
when it's been asked to show only files under a given directory.
|
||||
|
||||
I've reported these problems upstream. Easy enough to work around in git-annex's parser.
|
||||
"""]]
|
Loading…
Reference in a new issue