Bug in monotone automate inventory

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Bug in monotone automate inventory

Ian France
"monotone automate inventory" crashes.

It is the first time that I have run that command since upgrading from
version 0.19 to 0.23, I did remember to run the db migrate against the
database. I have been checking out, propagating and merging succesfully
since the update.


Output of the command:


 > monotone automate inventory
monotone: fatal: std::logic_error: paths.cc:209: invariant
'I(is_valid_internal(data()))' violated
monotone:
monotone:
monotone: this is almost certainly a bug in monotone.
monotone: please send this error message, the output of 'monotone
--full-version',
monotone: and a description of what you were doing to
[hidden email].



Full version:

monotone 0.23 (base revision: e32d161b8d5cde9f0968998cc332f82f82c27006)
Running on: Linux 2.6.8-24.16-default #1 Thu Jun 2 12:09:57 UTC 2005 i686
Changes since base revision:
new_manifest [68895899b164e1f443f988efef93e8384f1b182a]

old_revision [e32d161b8d5cde9f0968998cc332f82f82c27006]
old_manifest [68895899b164e1f443f988efef93e8384f1b182a]


   Generated from data cached in the distribution;
   further changes may have been made.

   Generated from data cached in the distribution;
   further changes may have been made.






_______________________________________________
Monotone-devel mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/monotone-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug in monotone automate inventory

Nathaniel Smith
On Thu, Oct 27, 2005 at 10:33:12AM +0100, Ian France wrote:
> > monotone automate inventory
> monotone: fatal: std::logic_error: paths.cc:209: invariant
> 'I(is_valid_internal(data()))' violated

Are you, by chance, running 'automate inventory' from inside the MT/
directory of a working copy?  There was a bug in 0.23 (fixed in
mainline) that would cause many operations to fail if monotone's
initial working directory was an MT/ directory.

If not, would it be possible to send the output of running the
offending command with --debug?

-- Nathaniel

--
"The problem...is that sets have a very limited range of
activities -- they can't carry pianos, for example, nor drink
beer."


_______________________________________________
Monotone-devel mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/monotone-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug in monotone automate inventory

Ian France
> Are you, by chance, running 'automate inventory' from inside the MT/
> directory of a working copy?  There was a bug in 0.23 (fixed in
> mainline) that would cause many operations to fail if monotone's
> initial working directory was an MT/ directory.
>

No, I'm afraid not. I have also found that I get the same error when
running:

monotone list unknown

and

monotone list ignored.



> If not, would it be possible to send the output of running the
> offending command with --debug?
>


Here it is (slightly edited to avoid lots of repetition)


monotone: started up on Linux 2.6.8-24.16-default #1 Thu Jun 2 12:09:57
UTC 2005 i686
monotone: command line: 'monotone', '--debug', 'automate', 'inventory'
monotone: set locale: LC_ALL=en_GB.UTF-8
monotone: initial abs path is: /home/ifrance/scratch/recruitPlus/client
monotone: initializing from directory
/home/ifrance/scratch/recruitPlus/client
monotone: searching for 'MT' directory with root '/'
monotone: 'MT' not found in '/home/ifrance/scratch/recruitPlus/client'
with '' removed
monotone: search for 'MT' ended at '/home/ifrance/scratch/recruitPlus'
with 'client' removed
monotone: working root is '/home/ifrance/scratch/recruitPlus'
monotone: initial relative path is 'client'
monotone: options path is MT/options
monotone: branch name is 'uk.co.fcomsrv.recruitplus'
monotone: local dump path is MT/debug
monotone: setting dump path to MT/debug
monotone: Lua::ok(): failed = 0
monotone: opening rcfile '/home/ifrance/.monotone/monotonerc' ...
monotone: Lua::ok(): failed = 0
monotone: '/home/ifrance/.monotone/monotonerc' is ok
monotone: skipping nonexistent rcfile 'MT/monotonerc'
monotone: executing command 'automate'
monotone: options path is MT/options
monotone: revision path is MT/revision
monotone: loading revision id from MT/revision
monotone: prepared statement SELECT id FROM revisions WHERE id = ?
monotone: binding 1 parameters for SELECT id FROM revisions WHERE id = ?
monotone: binding 1 with value '571d4b65a8bbb5ba5209ddf878c966eabcb50b76'
monotone: prepared statement SELECT data FROM revisions WHERE id = ?
monotone: binding 1 parameters for SELECT data FROM revisions WHERE id = ?
monotone: binding 1 with value '571d4b65a8bbb5ba5209ddf878c966eabcb50b76'
monotone: old manifest is ffa850affb08f3ec5f469616bd1cfe5fe89025e1
monotone: prepared statement SELECT id FROM manifest_deltas WHERE id = ?
monotone: binding 1 parameters for SELECT id FROM manifest_deltas WHERE
id = ?
monotone: binding 1 with value 'ffa850affb08f3ec5f469616bd1cfe5fe89025e1'
monotone: prepared statement SELECT id FROM manifests WHERE id = ?
monotone: binding 1 parameters for SELECT id FROM manifests WHERE id = ?
monotone: binding 1 with value 'ffa850affb08f3ec5f469616bd1cfe5fe89025e1'
monotone: binding 1 parameters for SELECT id FROM manifests WHERE id = ?
monotone: binding 1 with value 'ffa850affb08f3ec5f469616bd1cfe5fe89025e1'
monotone: prepared statement SELECT data FROM manifests WHERE id = ?
monotone: binding 1 parameters for SELECT data FROM manifests WHERE id = ?
monotone: binding 1 with value 'ffa850affb08f3ec5f469616bd1cfe5fe89025e1'
monotone: old manifest has 750 entries
monotone: work path is MT/work
monotone: checking for un-committed work file MT/work
monotone: read rearrangement from MT/work
monotone: restriction includes add file
common/src/fcomsrv/rpCommon/event/EventDefinition.java
monotone: loading lua hook get_linesep_conv
monotone: lua failure: isfunction() in get_fn; stack = nil
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: lua failure: isfunction() in get_fn; stack = nil
monotone: Lua::ok(): failed = 1
monotone: concatenating change sets
monotone: concatenating 750 and 1 deltas
monotone: processing delta on .mt-attrs
monotone: delta on .mt-attrs in first changeset renamed to .mt-attrs
monotone: processing delta on build.xml
monotone: delta on build.xml in first changeset renamed to build.xml
monotone: processing delta on client/.cvsignore
monotone: delta on client/.cvsignore in first changeset renamed to
client/.cvsignore
monotone: processing delta on client/README
monotone: delta on client/README in first changeset renamed to client/README

--- snip ---

This continues in the same vein for what seems to be all the files in my
project.

--- snip ---

monotone: delta on
common/src/fcomsrv/rpCommon/event/EventDefinition.java in second
changeset copied forward
monotone: finished concatenation
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_linesep_conv
monotone: Lua::ok(): failed = 1
monotone: loading lua hook get_charset_conv
monotone: Lua::ok(): failed = 1
monotone: ignoring book keeping entry MT
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 1
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 1
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 0
monotone: Lua::ok(): failed = 0
monotone: loading lua hook ignore_file
monotone: lua: extracted bool = 1
monotone: Lua::ok(): failed = 0
monotone: paths.cc:209: invariant 'I(is_valid_internal(data()))' violated
monotone: saving current work set: 0 items
monotone: finished saving work set
monotone: contents of work set:
monotone: Current work set: 0 items
monotone: statement cache statistics
monotone: prepared 5 statements
monotone: 1 executions of SELECT data FROM manifests WHERE id = ?
monotone: 1 executions of SELECT data FROM revisions WHERE id = ?
monotone: 1 executions of SELECT id FROM manifest_deltas WHERE id = ?
monotone: 2 executions of SELECT id FROM manifests WHERE id = ?
monotone: 1 executions of SELECT id FROM revisions WHERE id = ?
monotone: fatal: std::logic_error: paths.cc:209: invariant
'I(is_valid_internal(data()))' violated
monotone:
monotone:
monotone: this is almost certainly a bug in monotone.
monotone: please send this error message, the output of 'monotone
--full-version',
monotone: and a description of what you were doing to
[hidden email].
monotone: wrote debugging log to /home/ifrance/scratch/recruitPlus/MT/debug




_______________________________________________
Monotone-devel mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/monotone-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug in monotone automate inventory

Ian France
In reply to this post by Nathaniel Smith
Hi Nathaniel,

   I took a moment out of java programming to add some logging
statements to the monotone code and discovered the problem. I had
somehow managed to create a file with the name '^G' i.e. 0x07. Monotone
was rejecting this (quite reasonably) as an illegal filename.

   Sorry to have bothered you with this triviality and thank you for
your swift response.

Ian.

Nathaniel Smith wrote:

> On Thu, Oct 27, 2005 at 10:33:12AM +0100, Ian France wrote:
>
>>>monotone automate inventory
>>
>>monotone: fatal: std::logic_error: paths.cc:209: invariant
>>'I(is_valid_internal(data()))' violated
>
>
> Are you, by chance, running 'automate inventory' from inside the MT/
> directory of a working copy?  There was a bug in 0.23 (fixed in
> mainline) that would cause many operations to fail if monotone's
> initial working directory was an MT/ directory.
>
> If not, would it be possible to send the output of running the
> offending command with --debug?
>
> -- Nathaniel
>




_______________________________________________
Monotone-devel mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/monotone-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug in monotone automate inventory

Timothy  Brownawell
On Thu, 2005-10-27 at 15:41 +0100, Ian France wrote:
> Hi Nathaniel,
>
>    I took a moment out of java programming to add some logging
> statements to the monotone code and discovered the problem. I had
> somehow managed to create a file with the name '^G' i.e. 0x07. Monotone
> was rejecting this (quite reasonably) as an illegal filename.
>
>    Sorry to have bothered you with this triviality and thank you for
> your swift response.

No, it's still a bug. Monotone should detect this and give a sensible
error message (so you know how to fix it) instead of tripping over an
invariant.

Tim




_______________________________________________
Monotone-devel mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/monotone-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug in monotone automate inventory

Emile Snyder
In reply to this post by Ian France
On Thu, 2005-10-27 at 15:41 +0100, Ian France wrote:
> Hi Nathaniel,
>
>    I took a moment out of java programming to add some logging
> statements to the monotone code and discovered the problem. I had
> somehow managed to create a file with the name '^G' i.e. 0x07. Monotone
> was rejecting this (quite reasonably) as an illegal filename.

If you created it then it is, demonstrably, not an illegal filename ;)

>    Sorry to have bothered you with this triviality and thank you for
> your swift response.

No, this is clearly a bug in monotone.  You created a legal file on your
system in the working copy, and monotone choked and died.  Thanks for
digging and figuring it out,

-emile

> Ian.
>
> Nathaniel Smith wrote:
> > On Thu, Oct 27, 2005 at 10:33:12AM +0100, Ian France wrote:
> >
> >>>monotone automate inventory
> >>
> >>monotone: fatal: std::logic_error: paths.cc:209: invariant
> >>'I(is_valid_internal(data()))' violated
> >
> >
> > Are you, by chance, running 'automate inventory' from inside the MT/
> > directory of a working copy?  There was a bug in 0.23 (fixed in
> > mainline) that would cause many operations to fail if monotone's
> > initial working directory was an MT/ directory.
> >
> > If not, would it be possible to send the output of running the
> > offending command with --debug?
> >
> > -- Nathaniel
> >
>
>
>
>
> _______________________________________________
> Monotone-devel mailing list
> [hidden email]
> http://lists.nongnu.org/mailman/listinfo/monotone-devel
>

_______________________________________________
Monotone-devel mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/monotone-devel

signature.asc (196 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Bug in monotone automate inventory

Jon Bright
Emile Snyder wrote:
>
> No, this is clearly a bug in monotone.  You created a legal file on your
> system in the working copy, and monotone choked and died.  Thanks for
> digging and figuring it out,

An interesting question - should monotone allow you to create any old
filename, or should it restrict you to names with half a chance of being
cross-platform compatible?  I'd argue for at least the default to be the
latter, on the grounds that

a) Almost no-one really, really wants that file to be called that (as in
this case)
b) Otherwise, monotone gets to play fun games when it tries to check
that file out on a system that doesn't support that as a filename...

--
Jon Bright
Silicon Circus Ltd.
http://www.siliconcircus.com


_______________________________________________
Monotone-devel mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/monotone-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug in monotone automate inventory

Nathaniel Smith
On Thu, Oct 27, 2005 at 07:57:07PM +0200, Jon Bright wrote:
> An interesting question - should monotone allow you to create any old
> filename, or should it restrict you to names with half a chance of being
> cross-platform compatible?  I'd argue for at least the default to be the
> latter, on the grounds that

It isn't that, so much; we perfectly happily let you stick things like
colons in filenames (illegal on win32), and have names that are the
same except for case (blows up trying to check out on any case
insensitive filesystem, like win32 always and osx often).  We could
handle this more gracefully, but we decided that trying to force
everyone to the least common denominator was a non-starter; too many
projects don't care about cross-platform compatibility, and we can't
really impose that policy on them.

The checks that are in there are for actual non-printable control
characters, which tend to do things like cause your terminal to go
insane.  (Allowing arbitrary VT100 command sequences would be a
serious security bug, considering that they can push bytes into the
keyboard input buffer -- running ls might push "rm -rf ~\n" in, and
then when the ls completes your shell will have that waiting on
stdin!)

-- Nathaniel

--
Damn the Solar System.  Bad light; planets too distant; pestered with
comets; feeble contrivance; could make a better one myself.
  -- Lord Jeffrey


_______________________________________________
Monotone-devel mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/monotone-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug in monotone automate inventory

Emile Snyder
In reply to this post by Jon Bright
On Thu, 2005-10-27 at 19:57 +0200, Jon Bright wrote:

> Emile Snyder wrote:
> >
> > No, this is clearly a bug in monotone.  You created a legal file on your
> > system in the working copy, and monotone choked and died.  Thanks for
> > digging and figuring it out,
>
> An interesting question - should monotone allow you to create any old
> filename, or should it restrict you to names with half a chance of being
> cross-platform compatible?  I'd argue for at least the default to be the
> latter, on the grounds that
I have no real opinion on this point; I was just saying that 'monotone
ls unknown' should *never* die because of the name of any unknown file.
If we can't print some filename as is, then we should escape characters
in some appropriate way (handwaving here).  When you try to 'monotone
add' a file like that, it should perhaps disallow it (with some nicer
error like 'monotone cannot handle control characters in filenames, not
adding filename containing 0x07'), but again, shouldn't dump with an
invariant triggered.

thanks,
-emile

> a) Almost no-one really, really wants that file to be called that (as in
> this case)
> b) Otherwise, monotone gets to play fun games when it tries to check
> that file out on a system that doesn't support that as a filename...
>
> --
> Jon Bright
> Silicon Circus Ltd.
> http://www.siliconcircus.com
>

_______________________________________________
Monotone-devel mailing list
[hidden email]
http://lists.nongnu.org/mailman/listinfo/monotone-devel

signature.asc (196 bytes) Download Attachment