[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: ViewCVS URL in mailer hook script

From: C. Michael Pilato <cmpilato_at_collab.net>
Date: 2004-07-16 18:20:02 CEST

"Bruce A. Mah" <bmah@acm.org> writes:

> > Oh, now there's a thought. And since I'm a Project Admin on ViewCVS,
> > it shouldn't be too hard to get that accomplished. :-)
>
> Wearing multiple hats is kind of fun isn't it? :-)

You betcha!

> That seems like a natural place to put it in my mind, considering that
> the ViewCVS source code was the *second* place I looked.

Then that's precisely what I'll do.

In the meantime, here's the patch. I forgot to include changes to the
sample conf file that show how to use it, but the log message should
cover it.

Now, the patch:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Teach mailer.py how to send ViewCVS diffs. This adds a new
configuration option called 'viewcvs_base_url'. If that variable is
set for the repository, diffs will be sent. NOTE: This doesn't
work if you use ViewCVS in a way that requires your root to be
specified as a CGI query variable, such as:

   http://server.com/viewcvs/path/to/file?root=reposname

You must either be viewing the default root, or have the
root_as_url_component option enabled so that URLs look like:

   http://server.com/viewcvs/reposname/path/to/file

* tools/hook-scripts/mailer/mailer.py
  (generate_diffs): Construct ViewCVS URLs where possible.

Index: tools/hook-scripts/mailer/mailer.py
===================================================================
--- tools/hook-scripts/mailer/mailer.py (revision 9928)
+++ tools/hook-scripts/mailer/mailer.py (working copy)
@@ -23,6 +23,7 @@
 import cStringIO
 import smtplib
 import re
+import urllib
 
 import svn.fs
 import svn.delta
@@ -420,6 +421,7 @@
     return
 
   gen_diffs = cfg.get('generate_diffs', group, params)
+ viewcvs_base_url = cfg.get('viewcvs_base_url', group, params)
 
   ### Do a little dance for deprecated options. Note that even if you
   ### don't have an option anywhere in your configuration file, it
@@ -452,37 +454,73 @@
     if suppress == 'yes':
       diff_add = False
 
+ # Figure out if we're supposed to show ViewCVS URLs
+ if len(viewcvs_base_url):
+ show_urls = True
+ else:
+ show_urls = False
+
+ diff = None
+ diff_url = None
+ header = None
+
   if not change.path:
     ### params is a bit silly here
- if diff_delete == False:
- # a record of the deletion is in the summary. no need to write
- # anything further here.
- return
 
- output.write('\nDeleted: %s\n' % change.base_path)
- diff = svn.fs.FileDiff(repos.get_root(change.base_rev),
- change.base_path, None, None, pool)
+ header = 'Deleted: %s' % change.base_path
+ if show_urls:
+ diff_url = '%s/%s?view=auto&rev=%d' \
+ % (viewcvs_base_url,
+ urllib.quote(change.base_path[1:]), change.base_rev)
+ if diff_delete:
+ diff = svn.fs.FileDiff(repos.get_root(change.base_rev),
+ change.base_path, None, None, pool)
+ label1 = '%s\t%s' % (change.base_path, date)
+ label2 = '(empty file)'
+ singular = True
 
- label1 = '%s\t%s' % (change.base_path, date)
- label2 = '(empty file)'
- singular = True
   elif change.added:
- if change.base_path and (change.base_rev != -1):
- # this file was copied.
-
- if not change.text_changed:
- # copies with no changes are reported in the header, so we can just
- # skip them here.
- return
-
- if diff_copy == False:
- # a record of the copy is in the summary, no need to write
- # anything further here.
- return
-
+ if change.base_path and (change.base_rev != -1): # this file was copied.
       # note that we strip the leading slash from the base (copyfrom) path
- output.write('\nCopied: %s (from r%d, %s)\n'
- % (change.path, change.base_rev, change.base_path[1:]))
+ header = 'Copied: %s (from r%d, %s)' \
+ % (change.path, change.base_rev, change.base_path[1:])
+ if show_urls:
+ diff_url = '%s/%s?view=diff&rev=%d&p1=%s&r1=%d&p2=%s&r2=%d' \
+ % (viewcvs_base_url,
+ urllib.quote(change.path), repos.rev,
+ urllib.quote(change.base_path[1:]), change.base_rev,
+ urllib.quote(change.path), repos.rev)
+ if change.text_changed and diff_copy:
+ diff = svn.fs.FileDiff(repos.get_root(change.base_rev),
+ change.base_path[1:],
+ repos.root_this, change.path,
+ pool)
+ label1 = change.base_path[1:] + '\t(original)'
+ label2 = '%s\t%s' % (change.path, date)
+ singular = False
+ else:
+ header = 'Added: %s' % change.path
+ if show_urls:
+ diff_url = '%s/%s?view=auto&rev=%d' \
+ % (viewcvs_base_url,
+ urllib.quote(change.path), repos.rev)
+ if diff_add:
+ diff = svn.fs.FileDiff(None, None, repos.root_this, change.path, pool)
+ label1 = '(empty file)'
+ label2 = '%s\t%s' % (change.path, date)
+ singular = True
+ elif not change.text_changed:
+ # don't bother to show an empty diff. prolly just a prop change.
+ return
+ else:
+ header = 'Modified: %s' % change.path
+ if show_urls:
+ diff_url = '%s/%s?view=diff&rev=%d&p1=%s&r1=%d&p2=%s&r2=%d' \
+ % (viewcvs_base_url,
+ urllib.quote(change.path), repos.rev,
+ urllib.quote(change.base_path[1:]), change.base_rev,
+ urllib.quote(change.path), repos.rev)
+ if diff_modify:
       diff = svn.fs.FileDiff(repos.get_root(change.base_rev),
                              change.base_path[1:],
                              repos.root_this, change.path,
@@ -490,37 +528,17 @@
       label1 = change.base_path[1:] + '\t(original)'
       label2 = '%s\t%s' % (change.path, date)
       singular = False
- else:
- if diff_add == False:
- # a record of the addition is in the summary. no need to write
- # anything further here.
- return
 
- output.write('\nAdded: %s\n' % change.path)
- diff = svn.fs.FileDiff(None, None, repos.root_this, change.path, pool)
- label1 = '(empty file)'
- label2 = '%s\t%s' % (change.path, date)
- singular = True
- elif not change.text_changed:
- # don't bother to show an empty diff. prolly just a prop change.
+ if not (show_urls or diff):
     return
- else:
- if diff_modify == False:
- # a record of the modification is in the summary, no need to write
- # anything further here.
- return
-
- output.write('\nModified: %s\n' % change.path)
- diff = svn.fs.FileDiff(repos.get_root(change.base_rev),
- change.base_path[1:],
- repos.root_this, change.path,
- pool)
- label1 = change.base_path[1:] + '\t(original)'
- label2 = '%s\t%s' % (change.path, date)
- singular = False
-
+
+ output.write('\n' + header + '\n')
+ if diff_url:
+ output.write('Url: ' + diff_url + '\n')
   output.write(SEPARATOR + '\n')
-
+ if not diff:
+ return
+
   if diff.either_binary():
     if singular:
       output.write('Binary file. No diff available.\n')

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org
Received on Fri Jul 16 18:21:01 2004

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.