Hi people,

For the longest time I wanted to be able to look at
some of the changes that make it into the repository.
It is a great way to review code, follow the latest
changes, and understand/learn new code areas.

For the time being, one can (partially) do that by
reading the diffs sent out by Alexandre with each
release. However, they are _very_ big, and one
can not easily separate the logical changes from
one another.

Instead, what I was looking for was more on the lines
of somehow being able to easily look at the diff
associated with any of the email messages sent to
wine-cvs list. That is, have a link sent out together
with the message on which I can click to view the
respective diff.

Now, wanted this feature so badly that I actually went
ahead and implemented it! :))) Here is the idea:
  -- generate a ID for each message sent out
  -- include it in the message along with a summary
     of changes
  -- include a link in the message that passes to a
     CGI program the ID of the commit
  -- the CGI program searches the commitlog, extracts
     the summary info and generates the patch

It works. I am not 100% happy with the implementation,
but it is good enough to be used in practice (it is
used in production at my workplace). Here is a list of
issues with the current implementation:
  -- the generated diff includes only the changes, it
     does not include the added or deleted files.
     What to do with those?
  -- the CGI program must reside on the CVS machine
     as it needs access to the commit log; the name
     of the machine gets hardcoded in the commit
     log entry.
     Not a big deal in Wine's case I think, as
     cvs.winehq.com is not likely to change.
  -- the program does a linear scan of the commit log,
     so in the long term, we can have problems.
     I would like to have each log message saved in
     a file in some sort of directory structure
     (I was considering:
       commitlog.d/<year>/<week of year>/<id of msg>)
     That would be much better and I would be happy
     to implement it if no one objects to it.

How does the thing looks like? Well, here is a log
message generated as explained above:

<message>
ChangeSet ID: 967585195303215279709548
CVSROOT:  /usr/local/cvsroot
Module name: evolve-client
Changes by:  [EMAIL PROTECTED] 00/08/29 17:39:55

Modified files:
 com/esolutions/mdl/dbaccess: AbstractUpdater.java
                              ClientUpdater.java
 com/esolutions/mdl/logger: CreateLog_XML.java LogRecord.java
                            UpdateLog.java

Log message:
 Sync: fixed problem when there are more than one meta columns
 with the same table/field names in a meta object.

Patch:
http://cvs/patch?root=/usr/local/cvsroot&logs=/usr/local/cvsroot/CVSROOT/evo
lvelog&id=967585195303215279709548

Revision  Changes    Path
 1.19     +38 -20
evolve-client/com/esolutions/mdl/dbaccess/AbstractUpdater.java
 1.8      +4 -2
evolve-client/com/esolutions/mdl/dbaccess/ClientUpdater.java
 1.9      +88 -125
evolve-client/com/esolutions/mdl/logger/CreateLog_XML.java
 1.4      +7 -7      evolve-client/com/esolutions/mdl/logger/LogRecord.java
 1.7      +23 -20    evolve-client/com/esolutions/mdl/logger/UpdateLog.java
</message>

Now, my mailer may have wrapped some lines, but you
get the idea...

My questions are:
  -- do you guys agree that it would be cool to have
     such a thing for the Wine repository
  -- if so, what would it take to implement these
     features in our repository

--
Dimi.


Reply via email to