Hi Romain,

Romain Francoise <[EMAIL PROTECTED]> writes:

> "Mark D. Baushke" <[EMAIL PROTECTED]> writes:
> 
> > I hope you find the patch to be useful enough to incorporate into a
> > future debian revision of rcs.
> 
> Well, I'm all for making rlog(1) and friends recognize the id, but I'm
> not so sure about making RCS generate it at check in time.  RCS has been
> stable for many years and I don't want to deviate too much from the
> upstream codebase in the Debian package; your patch as it stands is too
> disruptive for my taste.
> 
> Of course if you can get upstream to merge it in a new RCS release,
> things will be different.

I have sent an e-mail to bug-rcs@gnu.org and [EMAIL PROTECTED] with
the same patch to see what they will consider. I do not know if they
will condier a new revision of RCS or not. If they do, I hope you will
consider submitting at least some patches with the debian security
fixes.

In the mean time, I have provided you with a stripped down version of
the commitid patch. This version teaches rlog and friends to recognize
the id, but does not change the ci command to generate new ids.

I hope you find this version more acceptable.

        -- Mark

ChangeLog entry:

2005-02-12  Mark D. Baushke  <[EMAIL PROTECTED]>

        * man/rcsfile.5in: Document new commitid delta phrase.
        * man/rcsfile.5: Regenerated.

        * rcsbase.h (struct hshentry): Add new commitid field.
        * src/rcsgen.c (putdelta): Preserve old commitid entries.
        * src/rcssyn.c (Kcommitid): New global constant keyword.
        (getdelta): Add optional parsing for it.
        * src/rlog.c (putadelta): Print it out.
        * src/rcssyn.c (getdelta): Initialize Delta->commitid.

Index:man/rcsfile.5
--- man/rcsfile.5~      1995-06-16 06:58:26.000000000 +0000
+++ man/rcsfile.5       2005-09-27 20:53:01.023504000 +0000
@@ -1,4 +1,4 @@
-.lf 1 ./rcsfile.5in
+.lf 1 rcsfile.5in
 .\" Set p to 1 if your formatter can handle pic output.
 .if t .nr p 1
 .de Id
@@ -69,6 +69,7 @@ nonterminal symbols are in
                \f3state\fP     {\f2id\fP}\f3;\fP
                \f3branches\fP  {\f2num\fP}*\f3;\fP
                \f3next\fP      {\f2num\fP}\f3;\fP
+               { \f3commitid\fP \f2id\fP\f3;\fP }
                { \f2newphrase\fP }*
 .LP
 \f2desc\fP     ::=     \f3desc\fP      \f2string\fP
@@ -128,6 +129,18 @@ and all the digits of years thereafter.
 Dates use the Gregorian calendar; times use UTC.
 .PP
 The
+.I commitid
+is followed by an
+.I id
+token. This token is intended to be unique across
+multiple files and is used to help group files as
+being a part of the same logical commit.
+This token must uniquely identify the commit
+operation that was applied to a set of RCS files.
+In particular, it must be unique among all the
+commitids in this file.
+.PP
+The
 .I newphrase
 productions in the grammar are reserved for future extensions
 to the format of \*r files.
@@ -230,7 +243,7 @@ The following diagram shows an example o
 .fi
 .\}
 .if \np \{\
-.lf 232
+.lf 245
 .PS 4.250i 3.812i
 .\" -2.0625 -4.25 1.75 0
 .\" 0.000i 4.250i 3.812i 0.000i
@@ -239,7 +252,7 @@ The following diagram shows an example o
 .nr 0x 1
 \h'3.812i'
 .sp -1
-.lf 242
+.lf 255
 \h'2.062i-(\w'Head'u/2u)'\v'0.125i-(0v/2u)+0v+0.22m'Head
 .sp -1
 \h'2.062i'\v'0.250i'\D'l0.000i 0.500i'
@@ -256,7 +269,7 @@ The following diagram shows an example o
 .sp -1
 \h'1.688i'\v'0.750i'\D'l0.000i 0.500i'
 .sp -1
-.lf 244
+.lf 257
 \h'2.062i-(\w'2.1'u/2u)'\v'1.000i-(0v/2u)+0v+0.22m'2.1
 .sp -1
 \h'2.062i'\v'1.250i'\D'l0.000i 0.500i'
@@ -265,7 +278,7 @@ The following diagram shows an example o
 .sp -1
 \h'2.062i'\v'1.750i'\D'l-0.025i -0.100i'
 .sp -1
-.lf 246
+.lf 259
 \h'2.062i-(\w'1.3'u/2u)'\v'2.000i-(1v/2u)+0v+0.22m'1.3
 .sp -1
 \h'2.062i'\v'2.250i'\D'l-0.375i -0.500i'
@@ -280,7 +293,7 @@ The following diagram shows an example o
 .sp -1
 \h'1.375i'\v'1.500i'\D'l0.025i 0.100i'
 .sp -1
-.lf 249
+.lf 262
 \h'1.375i-(\w'1.3.1.1'u/2u)'\v'1.250i-(1v/2u)+1v+0.22m'1.3.1.1
 .sp -1
 \h'1.375i'\v'1.000i'\D'l-0.375i 0.500i'
@@ -295,7 +308,7 @@ The following diagram shows an example o
 .sp -1
 \h'2.062i'\v'2.750i'\D'l-0.025i -0.100i'
 .sp -1
-.lf 252
+.lf 265
 \h'2.062i-(\w'1.2'u/2u)'\v'3.000i-(1v/2u)+0v+0.22m'1.2
 .sp -1
 \h'2.062i'\v'3.250i'\D'l-0.375i -0.500i'
@@ -310,7 +323,7 @@ The following diagram shows an example o
 .sp -1
 \h'0.375i'\v'2.500i'\D'l0.025i 0.100i'
 .sp -1
-.lf 255
+.lf 268
 \h'0.375i-(\w'1.2.1.1'u/2u)'\v'2.250i-(1v/2u)+1v+0.22m'1.2.1.1
 .sp -1
 \h'0.375i'\v'2.000i'\D'l-0.375i 0.500i'
@@ -325,7 +338,7 @@ The following diagram shows an example o
 .sp -1
 \h'0.375i'\v'1.500i'\D'l0.025i 0.100i'
 .sp -1
-.lf 257
+.lf 270
 \h'0.375i-(\w'1.2.1.3'u/2u)'\v'1.250i-(1v/2u)+1v+0.22m'1.2.1.3
 .sp -1
 \h'0.375i'\v'1.000i'\D'l-0.375i 0.500i'
@@ -340,7 +353,7 @@ The following diagram shows an example o
 .sp -1
 \h'2.750i'\v'2.500i'\D'l0.025i 0.100i'
 .sp -1
-.lf 261
+.lf 274
 \h'2.750i-(\w'1.2.2.1'u/2u)'\v'2.250i-(1v/2u)+1v+0.22m'1.2.2.1
 .sp -1
 \h'2.750i'\v'2.000i'\D'l-0.375i 0.500i'
@@ -355,7 +368,7 @@ The following diagram shows an example o
 .sp -1
 \h'3.438i'\v'1.250i'\D'l0.025i 0.100i'
 .sp -1
-.lf 264
+.lf 277
 
\h'3.438i-(\w'\s-21.2.2.1.1.1\s0'u/2u)'\v'1.000i-(1v/2u)+1v+0.22m'\s-21.2.2.1.1.1\s0
 .sp -1
 \h'3.438i'\v'0.750i'\D'l-0.375i 0.500i'
@@ -370,7 +383,7 @@ The following diagram shows an example o
 .sp -1
 \h'2.750i'\v'1.500i'\D'l0.025i 0.100i'
 .sp -1
-.lf 267
+.lf 280
 \h'2.750i-(\w'1.2.2.2'u/2u)'\v'1.250i-(1v/2u)+1v+0.22m'1.2.2.2
 .sp -1
 \h'2.750i'\v'1.000i'\D'l-0.375i 0.500i'
@@ -385,7 +398,7 @@ The following diagram shows an example o
 .sp -1
 \h'2.062i'\v'3.750i'\D'l-0.025i -0.100i'
 .sp -1
-.lf 270
+.lf 283
 \h'2.062i-(\w'1.1'u/2u)'\v'4.000i-(1v/2u)+0v+0.22m'1.1
 .sp -1
 \h'2.062i'\v'4.250i'\D'l-0.375i -0.500i'
@@ -398,9 +411,9 @@ The following diagram shows an example o
 .if \n(00 .fi
 .br
 .nr 0x 0
-.lf 271
+.lf 284
 .PE
-.lf 272
+.lf 285
 .\}
 .PP
 .SH IDENTIFICATION
Index:man/rcsfile.5in
--- man/rcsfile.5in~    1995-06-05 08:28:35.000000000 +0000
+++ man/rcsfile.5in     2005-09-27 20:52:46.424504000 +0000
@@ -68,6 +68,7 @@ nonterminal symbols are in
                \f3state\fP     {\f2id\fP}\f3;\fP
                \f3branches\fP  {\f2num\fP}*\f3;\fP
                \f3next\fP      {\f2num\fP}\f3;\fP
+               { \f3commitid\fP \f2id\fP\f3;\fP }
                { \f2newphrase\fP }*
 .LP
 \f2desc\fP     ::=     \f3desc\fP      \f2string\fP
@@ -127,6 +128,18 @@ and all the digits of years thereafter.
 Dates use the Gregorian calendar; times use UTC.
 .PP
 The
+.I commitid
+is followed by an
+.I id
+token. This token is intended to be unique across
+multiple files and is used to help group files as
+being a part of the same logical commit.
+This token must uniquely identify the commit
+operation that was applied to a set of RCS files.
+In particular, it must be unique among all the
+commitids in this file.
+.PP
+The
 .I newphrase
 productions in the grammar are reserved for future extensions
 to the format of \*r files.
Index:src/rcsbase.h
--- src/rcsbase.h~      1995-06-16 06:19:24.000000000 +0000
+++ src/rcsbase.h       2005-09-28 21:47:51.490505000 +0000
@@ -358,6 +363,7 @@ struct hshentry {
        char const        * lockedby; /* who locks the revision             */
        char const        * state;    /* state of revision (Exp by default) */
        char const        * name;     /* name (if any) by which retrieved   */
+       char const        * commitid; /* text string to associate commits   */
        struct cbuf         log;      /* log message requested at checkin   */
         struct branchhead * branches; /* list of first revisions on branches*/
        struct cbuf         ig;       /* ignored phrases in admin part      */
@@ -662,6 +668,7 @@ extern int               TotalDeltas;
 extern char const *const expand_names[];
 extern char const
        Kaccess[], Kauthor[], Kbranch[], Kcomment[],
+       Kcommitid[],
        Kdate[], Kdesc[], Kexpand[], Khead[], Klocks[], Klog[],
        Knext[], Kstate[], Kstrict[], Ksymbols[], Ktext[];
 void unexpected_EOF P((void)) exiting;
Index:src/rcsgen.c
--- src/rcsgen.c~       1995-06-16 06:19:24.000000000 +0000
+++ src/rcsgen.c        2005-09-27 22:08:47.421504000 +0000
@@ -547,6 +547,9 @@ putdelta(node, fout)
 
        aprintf(fout, ";\n%s\t%s;\n", Knext, node->next?node->next->num:"");
        awrite(node->ig.string, node->ig.size, fout);
+
+       if (node->commitid)
+               aprintf(fout, "%s\t%s;\n", Kcommitid, node->commitid);
 }
 
 
Index:src/rcssyn.c
--- src/rcssyn.c~       1995-06-16 06:19:24.000000000 +0000
+++ src/rcssyn.c        2005-10-04 08:05:21.000000000 +0000
@@ -171,6 +171,7 @@ char const
        Kauthor[]   = "author",
        Kbranch[]   = "branch",
        Kcomment[]  = "comment",
+       Kcommitid[] = "commitid",
        Kdate[]     = "date",
        Kdesc[]     = "desc",
        Kexpand[]   = "expand",
@@ -433,6 +434,14 @@ getdelta()
        Delta->lockedby = 0;
        Delta->log.string = 0;
        Delta->selector = true;
+
+       if (getkeyopt(Kcommitid)) {
+               Delta->commitid = NextString;
+               nextlex();
+               getsemi(Kcommitid);
+        } else
+               Delta->commitid = NULL;
+
        Delta->ig = getphrases(Kdesc);
         TotalDeltas++;
         return (true);
Index:src/rlog.c
--- src/rlog.c~ 1995-06-16 06:19:24.000000000 +0000
+++ src/rlog.c  2005-09-26 17:23:55.257504000 +0000
@@ -591,6 +591,10 @@ putadelta(node,editscript,trunk)
              aprintf(out, insDelFormat,
                              editscript->insertlns, editscript->deletelns);
 
+       if ( node->commitid )
+          aprintf(out, "%s commitid: %s", (editscript) ? ";" : "",
+                  node->commitid);
+
         newbranch = node->branches;
         if ( newbranch ) {
           bufautobegin(&branchnum);

Reply via email to