[p4] Scripting with perforce, pitafalls ...
Looney, James B (N-ULA)
james.b.looney at lmco.com
Mon Mar 3 09:41:52 PST 2008
If you're scripting with a language which knows how to handle marshaled
data, I recommend using the -G option with the client. I use Python
myself. If you do that, part of the returned data is usually a field
called 'code'. 'code' will tell you directly whether or not it's an
error.
-James
> -----Original Message-----
> From: perforce-user-bounces at perforce.com
> [mailto:perforce-user-bounces at perforce.com] On Behalf Of Jeff
> A. Bowles
> Sent: Monday, March 03, 2008 9:08 AM
> To: Ildefonzo Arocha
> Cc: perforce-user at perforce.com
> Subject: Re: [p4] Scripting with perforce, pitafalls ...
>
> Step on: know what tools are available for the script writer.
> Option #1: normal 'p4' command usage.
>
>
> Example: "p4 sync" / "p4 files" / "p4 submit -i"
>
>
> Good/bad:
>
>
> - simple, but you are parsing formatted output.
> - Filenames with embedded spaces are headaches.
> - Getting status / success-fail is harder.
>
> Option #2: Use "p4 -s" for easier status / success-fail processing.
>
> Example: "p4 -s sync" / "p4 -s files"
>
>
> Good/bad:
>
>
> - simple, but you are parsing formatted output.
> - Filenames with embedded spaces are headaches.
> - Getting status / success-fail is slightly easier. You
> still need to
> decide whether the command worked or not. ("Exit status"
> from the 'p4' tells
> you whether the protocol worked, not whether the command
> worked, so '-s'
> helps.)
>
> Option #3: Read up on tagged output.
>
> Example: "p4 -Ztag sync" / "p4 -Ztag files"
>
>
> Good/bad:
>
>
>
> - Output is name/value pairs, far easier to parse.
> - Filenames with embedded spaces are easier to parse / work with.
> - Many (nearly all) examples of tagged output are
> parseable easily in
> Perl.
> - "p4 -Ztag describe" is a bit of a nuisance if the description is
> multiple paragraphs. (You'll see why.)
> - Getting status / success-fail is slightly easier. Still,
> sometimes
> an error or warning will appear as a single formatted
> string to pass to the
> user, and you cannot decide without parsing the string, if
> it was a warning
> or an error.
>
>
> I would say that "tagged output" is your best choice, right now.
>
> -Jeff Bowles
>
> ps. If you can write in Python or Ruby, the "p4 -G / p4 -R"
> output (it's
> binary, don't try this without redirecting the output!) is the best
> possibility. You still have to deal with "was that a success
> or failure?"
> but the parsing work is far better than anything in ASCII.
>
>
> On Mon, Mar 3, 2008 at 1:14 AM, Ildefonzo Arocha
> <ilde.web at gmail.com> wrote:
>
> > Hello Perforcers,
> >
> > Is it me or does anyone else find that even for the simplest task,
> > scripts have to handle and validate a lot of possible
> errors/warnings.
> >
> > I am relatively new with Perforce. In the last months I have been
> > developing some administrative and end-users scripts. It has been a
> > challange though, no matter what I do, there is always some little
> > detail that makes my scripts fail.
> >
> > On some situations some warnings are sent out as
> information messages
> > so parsing the output for "error" is not possible, same examples:
> >
> > > p4 -s add -n project.r
> > error: project.r - protected namespace - access denied.
> > exit: 0
> > ==> OK
> >
> > > p4 -s add project.xml
> > error: project.xml - file(s) not in client view.
> > exit: 0
> > ==> OK
> >
> > > p4 -s add -n test.p
> > info: //xp/i2/main/ui/test.p#1 - opened for add
> > info1: //xp/i2/main/ui/test.p - also opened by iar at main
> > exit: 0
> > ==> Not Ok?
> >
> > > p4 -s add test.p
> > info: //xp/i2/main/ui/test.p#1 - currently opened for add
> > exit: 0
> > ==> Not Ok?
> >
> > > p4 -s add -n ui/polylayout/LayoutLL/aadtgend02.lst
> > info: //xp/i2/main/ui/polylayout/LayoutLL/aadtgend02.lst - can't add
> > existing file
> > exit: 0
> > ==> Not Ok?
> >
> > > p4 -s edit -n ui/polylayout/LayoutLL/aadtgend02.lst
> > info: //xp/i2/main/ui/polylayout/LayoutLL/aadtgend02.lst -
> can't edit
> > exclusive file already opened
> > info1: //xp/i2/main/ui/polylayout/LayoutLL/aadtgend02.lst - also
> > opened by vim at main
> > exit: 0
> > ==> Not OK?
> >
> > > p4 -s sync -n
> > error: File(s) up-to-date.
> > exit: 0
> > ==> Not OK?
> >
> > I have had several different situations, can't remember
> them all, the
> > most recent had to do with a script the performs a "intergrate -n -b
> > ..." to list all missing revisions from a branch to another. I
> > inadvertively changed something in the Protection Table, the script
> > then returned no results. After some digging around I
> found out that:
> >
> > > p4 -s -c "batch" integrate -n -r -b B_PRA
> > error: No permission for operation on file(s).
> > exit: 0
> > ==> OK, interpret as an error
> >
> > > p4 -s integrate -n -b B_5.01.04 -s
> "//xp/i2/main/ui/... at 19026, at 19026"
> > error: //xp/i2/main/ui/... at 19026, at 19026 - all revision(s) already
> > integrated.
> > exit: 0
> > ==> Arguably I wouldn't consider this an error, but is this
> behaviour
> > consistant?
> >
> > This last one is quite contradicting, you can argue that the
> > "integrate" command was not succesful hence "error" but then on the
> > examples above ("p4add" and "p4 edit") the commands are not
> succesful
> > either, however it outputs "info".
> >
> > Because of this, I have been in the need to send the output
> of each p4
> > command to some temporal file, analyze it for info messages
> and error
> > messages and selectively ignore what is error and what is not. Hard
> > coding error messages in a script is not something I like to do, and
> > since I don't know in advance all possible message
> combination, I have
> > to do corrections on the scripts upon users feedback. A major
> > annoyance, not to mention unproductive.
> >
> > Thoughts anyone?
> >
> > Regards,
> > Ildefonzo
> > _______________________________________________
> > perforce-user mailing list - perforce-user at perforce.com
> > http://maillist.perforce.com/mailman/listinfo/perforce-user
> >
>
>
>
> --
> ---
> Jeff Bowles - jeff.a.bowles at gmail.com
> _______________________________________________
> perforce-user mailing list - perforce-user at perforce.com
> http://maillist.perforce.com/mailman/listinfo/perforce-user
>
More information about the perforce-user
mailing list