<HTML>
<HEAD>
<TITLE>
Utilities Project - Perforce Public Depot
</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<P>
<A NAME="toc"></A>
<h2>
<sub><a href="../../index.html">Perforce Public Depot</a></sub><br>
Perforce Utilities Project
<br>
</H2>
<P>
<TABLE BORDER=0>
<TR>
<TD VALIGN=TOP>
<B>
<UL>
<LI><A HREF="#about">About This Project
</A>
<LI><A HREF="#browsers">Depot Browsers
</A>
<LI><A HREF="#convert">Conversion Scripts
</A>
<LI><A HREF="#daemons">Review Daemons
</A>
</UL>
<TD VALIGN=TOP>
<B>
<UL>
<LI><A HREF="#triggers">Pre-Submit Triggers
</A>
<LI><A HREF="#diffmrg">Diffing and Merging
</A>
<LI><A HREF="#defect">Defect Tracking
</A>
<LI><A HREF="#compat">Compatibility Aids
</A>
</UL>
</TABLE>
<B>
<LI><A HREF="#misc">Miscellany
</A>
</CENTER>
<br>
<br>
<br>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD BGCOLOR=FFCC66>
<A NAME="about"></A>
<H2>About This Project
</H2>
<TD WIDTH=5% BGCOLOR=FFCC66 ALIGN=RIGHT><FONT SIZE="-2"><A HREF="#toc">
Back to Table of Contents</A></TD></TR>
</TABLE>
<!------------------------------------------------------------------>
<TABLE CELLPADDING=5%>
<TD VALIGN=TOP>
<B>Content</B></TD>
<TD VALIGN=TOP>
The Perforce Utilities Project is a collection of
programs and scripts that integrate Perforce with a variety
of software development tools and environments, and/or
provide alternative interfaces to the Perforce SCM system.
</TD>
</TR><TR>
<TD VALIGN=TOP>
<B>Curator</B></TD>
<TD VALIGN=TOP>
This project is maintained by Perforce staff, with individual
curators as shown below.
Eventually we'll split these utilities up into separate projects,
depending on their activity and growth. If you have a particular
interest in any or all of this project, and would like
to volunteer as a curator, please email us.
<p>
If you would like to contribute to one of the categories that
does not have a curator yet,
you may request to have your submitted
changes integrated into this project by emailing Perforce staff at
<A HREF="mailto:info@perforce.com">info@perforce.com</A>.
</TD>
</TR>
</TABLE>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD BGCOLOR=FFCC66>
<A NAME="browsers"></A>
<H2>Depot Browsers
</H2>
<TD WIDTH=5% BGCOLOR=FFCC66 ALIGN=RIGHT><FONT SIZE="-2"><A HREF="#toc">
Back to Table of Contents</A></TD></TR>
</TABLE>
<!------------------------------------------------------------------>
<DL>
<P><DT><B>
<A HREF="http://public.perforce.com/cgi-bin/p4db/dtb.cgi?FSPC=public/perforce/utils/perfbrowse">
//public/perforce/utils/perfbrowse/...
</A></CODE></B><DD>
<DD>
<B>perfbrowse</b>.
Shows depot hierarchies, changelists, filelogs, file contents, diffs, etc.
There's a
<a href=perfbrowse/perfbrowse.perl@P99.1>
99.1-compatible</a> version and a
<a href=perfbrowse/perfbrowse.perl@P98.2>
98.2-compatible</a> version.
<P><DT><B>
<A HREF="http://public.perforce.com/cgi-bin/p4db/dtb.cgi?FSPC=public/perforce/utils/p4db">
//public/perforce/utils/p4db/...
</A></CODE></B><DD>
<DD>
<B>P4DB</b>.
Based on <b>perfbrowse</b>, with added features, including
labels associated with files,
file content viewer with annotated deltas,
HTML file viewer,
and The Great Submit Race.
</DL>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD BGCOLOR=FFCC66>
<A NAME="convert"></A>
<H2>Conversion Scripts
</H2>
<TD WIDTH=5% BGCOLOR=FFCC66 ALIGN=RIGHT><FONT SIZE="-2"><A HREF="#toc">
Back to Table of Contents</A></TD></TR>
</TABLE>
<!------------------------------------------------------------------>
<DL>
<P><DT><B>
<A HREF="http://public.perforce.com/cgi-bin/p4db/dtb.cgi?FSPC=public/perforce/utils/cvs2p4">
//public/perforce/utils/cvs2p4/...
</A></CODE></B><DD>
<DD>
This <b>CVS to Perforce</b> converter extracts metadata from a CVS repository
and generates a Perforce depot using Perforce client commands. The
converter handles Attic/ and .cvsignore, and has flexible support for
branching.
Contributed by
<A HREF="http://public.perforce.com/cgi-bin/p4db/lu.cgi?USER=richard_geiger">
Richard Geiger</a>, who is also its curator. (See the
README file for more info.)
</DL>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD BGCOLOR=FFCC66>
<A NAME="daemons"></A>
<H2>Review Daemons
</H2>
<TD WIDTH=5% BGCOLOR=FFCC66 ALIGN=RIGHT><FONT SIZE="-2"><A HREF="#toc">
Back to Table of Contents</A></TD></TR>
</TABLE>
<!------------------------------------------------------------------>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD BGCOLOR=FFCC66>
<A NAME="triggers"></A>
<H2>Pre-Submit Triggers
</H2>
<TD WIDTH=5% BGCOLOR=FFCC66 ALIGN=RIGHT><FONT SIZE="-2"><A HREF="#toc">
Back to Table of Contents</A></TD></TR>
</TABLE>
<!------------------------------------------------------------------>
<P>
<DL>
<DT>
<B>
<A HREF="http://public.perforce.com/cgi-bin/p4db/dtb.cgi?FSPC=public/perforce/utils/triggers">
//public/perforce/utils/triggers/...
</A></CODE></B>
<DD>
Perforce Release 99.1 introduced server support for pre-submit
triggers.
Here are some example scripts
that can be used as triggers in a Perforce 99.1 (or later) server.
These scripts were written and contributed by
<a href="/guest/jeff_bowles/jab.html">
Jeff Bowles</a>
and <A HREF="/guest/wes_peters/pcp.html">Wes Peters</A>.
<P>
<table border=1>
<tr>
<td><b>Script Name</b><td><b>Status<sup>*</sup></b><td><center><b>Description</b></center></tr>
<tr>
<td>
<B><A HREF="triggers/Jobs.pl">
Jobs.pl
</A></B>
<td><img src="triggers/smiley.gif">
<td>
Example trigger to enforce a rule "submissions must be associated
with a job.".
<tr>
<td>
<B><A HREF="triggers/Jobs.sh">
Jobs.sh
</A></B>
<td><img src="triggers/smiley.gif">
<td>
Similar to above, but contributed by <A HREF="/guest/wes_peters/pcp.html">Wes Peters</A>
and written in Unix "shell". <i>Takes a different approach to the problem,
running "p4 fixes" to determine whether you're fixing something with this submission.</i>
<tr>
<td>
<B><A HREF="triggers/CheckC.pl">
CheckC.pl
</A></B>
<td><img src="triggers/afraid.gif">
<td>
A script to notice when you're creating new files (or integrating to a new
branch) and the directory name you're writing the [new] file to isn't the
same case as an existing directory name.
<p><i>(For example, if "//depot/<u>x</u>/<u>y</u>/z.c"
exists, this won't allow you to create a file named "//depot/<u>X</u>/<u>Y</u>/one.c".)</i>
<tr>
<td>
<B><A HREF="triggers/Pairs.pl">
Pairs.pl
</A></B>
<td><img src="triggers/smiley.gif">
<td>
Example trigger to enforce a rule "files of suffix .x/.y need to be checked
in as pairs".
<tr>
<td>
<B><A HREF="triggers/Binary.pl">
Binary.pl
</A></B>
<td><img src="triggers/smiley.gif">
<td>
Example trigger to enforce a rule "submissions of .gif must binary files
and .sh files should be text and...."
<tr>
<td>
<B><A HREF="triggers/simple.cmd">
simple.cmd
</A></B>
<td><img src="triggers/teaching.gif">
<td>
Classroom example of writing a trigger using the Windows/NT command shell,
a.k.a. "a <i>.cmd</i> script". (It checks that "Bug:" is included in the change
description.) Doesn't do a lot, but gets the idea across.
</table>
<p>
<sup>*</sup>How to interpret the "Status" field:
<ul><li>a smiley face means "it's probably
simple enough to use without any worries that it'll corrupt or slow down anything" ;
<li>a scared face means "you probably want to read the comments
at the top of the script - this might need localization/tailoring or might have
performance implications you want to investigate before deploying on your production
Perforce server" ;
<li>and "under construction" means just that - you can look, you can
make copies, but it's getting reworked at the moment.
</ul>
</DL>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD BGCOLOR=FFCC66>
<A NAME="diffmrg"></A>
<H2>Diffing and Merging
</H2>
<TD WIDTH=5% BGCOLOR=FFCC66 ALIGN=RIGHT><FONT SIZE="-2"><A HREF="#toc">
Back to Table of Contents</A></TD></TR>
</TABLE>
<!------------------------------------------------------------------>
<DL>
<P><DT><B>
<A HREF="http://public.perforce.com/cgi-bin/p4db/dtb.cgi?FSPC=public/perforce/utils/emacs_mrg">
//public/perforce/utils/emacs_mrg/...
</A></CODE></B><DD>
<DD>
Some emacs lisp code to make editing merges in p4 easier.
</DL>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD BGCOLOR=FFCC66>
<A NAME="defect"></A>
<H2>Defect Tracking
</H2>
<TD WIDTH=5% BGCOLOR=FFCC66 ALIGN=RIGHT><FONT SIZE="-2"><A HREF="#toc">
Back to Table of Contents</A></TD></TR>
</TABLE>
<!------------------------------------------------------------------>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD BGCOLOR=FFCC66>
<A NAME="compat"></A>
<H2>Compatibility Aids
</H2>
<TD WIDTH=5% BGCOLOR=FFCC66 ALIGN=RIGHT><FONT SIZE="-2"><A HREF="#toc">
Back to Table of Contents</A></TD></TR>
</TABLE>
<!------------------------------------------------------------------>
<DL>
<P><DT><B>
<A HREF="http://public.perforce.com/cgi-bin/p4db/dtb.cgi?FSPC=public/perforce/utils/c4">
//public/perforce/utils/c4/...
</A></CODE></B><DD>
<DD>
<B>c4</B>. A CVS-like frontend to <b>p4</b>. This package was
contributed by
<A HREF="http://public.perforce.com/cgi-bin/p4db/lu.cgi?USER=neil_russell">
Neil Russell</a>, who is also its curator. (See the
README file for more info.)
<P><DT><B>
<A HREF="http://public.perforce.com/cgi-bin/p4db/dtb.cgi?FSPC=public/perforce/utils/aegis">
//public/perforce/utils/aegis/...
</A></CODE></B><DD>
<DD>
Aegis-like wrappers to <b>p4</b>.
</DL>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD BGCOLOR=FFCC66>
<A NAME="misc"></A>
<H2>Miscellany
</H2>
<TD WIDTH=5% BGCOLOR=FFCC66 ALIGN=RIGHT><FONT SIZE="-2"><A HREF="#toc">
Back to Table of Contents</A></TD></TR>
</TABLE>
<!------------------------------------------------------------------>
<br><br><br>
<!------------------------------------------------------------------>
<P>
<TABLE CELLSPACING=0 BORDER=0 WIDTH=100%>
<TR>
<TD WIDTH=15% BGCOLOR=FFCC66 ALIGN=LEFT VALIGN=CENTER>
<FONT SIZE="-2">
Copyright ©<br>
1998, 1999<br>
<a href="http://www.perforce.com">Perforce Software</a><br>
</FONT>
</TD>
<TD WIDTH=70% BGCOLOR=FFCC66 ALIGN=CENTER>
<FONT SIZE="-2">
You're browsing a file stored as<br>
<code>$Id: //guest/michael_marks/perforce/utils/index.html#1 $</code><br>
in the
<A HREF=http://public.perforce.com/public/index.html>Perforce Public Depot</A>.
</FONT>
</TD>
<TD WIDTH=15% BGCOLOR=FFCC66 ALIGN=RIGHT>
<FONT SIZE="-2"><A HREF="#toc">
Back to<BR>Table of<BR>Contents</A></TD></TR>
</FONT>
</TD>
</TR>
</TABLE>
<!------------------------------------------------------------------>
</BODY>