Commit Graph

2404 Commits (master)

Author SHA1 Message Date
cmpilato a8d3373025 Fix issue #514 (Simple file view has page title with "Annotation of:").
* templates/classic/file.ezt,
* templates/default/file.ezt
  Set the page's <title> attribute to "Annotation of ..." or "Contents
  of ...", depending on whether the output is annotated.

Patch by: John McNally <jmcnally{__AT__}collab.net>

git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2796 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-10-24 16:57:59 +00:00
cmpilato de517ae29c Fix issue #515 ("XSS bug in diff view (CVE-2012-4533)").
* lib/viewvc.py
  (DiffSource._get_row): Pass the "extra" line information through the
    formatter code so that, at a minimum, it's HTML-escaped.

Patch by: Nicolás Alvarez <nicolas.alvarez{__AT__}gmail.com>


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2792 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-10-24 13:26:36 +00:00
cmpilato 4a98f512f7 * conf/viewvc.conf.dist
Show the default value of 'hr_funout' as 1 (which matches the
  programmatic default).


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2791 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-10-24 13:22:14 +00:00
cmpilato f4945fd7d9 Oops! Fix the diff view I broke in r2784.
* lib/viewvc.py
  (view_diff): Add 'cfg' convenience variable (to avoid a stack trace
    caused by using such a thing a few lines later).


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2790 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-10-03 14:33:38 +00:00
cmpilato 4590ebbd6b Fix issue #512 ("'Select for diffs' does not work across pages").
* lib/viewvc.py
  (view_log): Preserve the 'log_pagestart' query value when generating
    the 'select for diff' links so that clicking the link returns you to
    the same page (modulo repagination due to new commits in the race
    window ... but let's not think about that).  Also, preserve the
    'r1' query parameter when generating the paging form.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2788 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-10-03 14:22:48 +00:00
cmpilato ace5d55f0e * bin/cgi/query.cgi,
* bin/cgi/viewvc.cgi
  Add some commented-out logic for renice-ing the ViewVC CGI process.

Inspired by:  Karl Berry <karl{__AT__}freefriends.org>


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2786 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-09-05 15:52:27 +00:00
cmpilato 00feefc3dc Finish issue #510 ("Block the expensive display of binary files").
Add a new configuration option 'binary_mime_types' which accepts a
comma-delimited list of MIME content type patterns ('text/plain', or
'image/*', etc.) against which versioned file MIME types are
compared for the purposes of deciding whether to allow their display
in the 'markup', 'annotate', 'diff' and 'patch' views.

* conf/viewvc.conf.dist
  (binary_mime_types): Describe new option.

* lib/config.py
  (_force_multi_value): Add 'binary_file_types' to the list of
    multi-value options.
  (Config.set_defaults): Initialize cfg.options.binary_mime_types.

* lib/viewvc.py
  (is_binary_file_mime_type): New function.
  (get_file_view_info): Use is_binary_file_mime_type() to determine
    whether to return links to content-ful views of the input file.
  (markup_or_annotate, view_diff): Use is_binary_file_mime_type() to
    deny display of so-deemed binary files.



git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2784 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-09-05 12:55:19 +00:00
cmpilato adfa50c9b4 * lib/vclib/svn/svn_ra.py
(RemoteSubversionRepository.itemlog): Only fetch lock and size
    information for files, not directories.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2781 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-22 20:22:49 +00:00
cmpilato 5e815bc101 * docs/release-notes/1.1.0.html
Update some of the warnings with notes about their subsequent
  resolutions.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2780 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-22 19:30:10 +00:00
cmpilato ca040b2361 Merge changes from 1.1.15 release.
git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2779 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-22 19:29:31 +00:00
cmpilato b5d66b7afe Bump latest advertised release.
git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2777 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-22 18:52:43 +00:00
cmpilato 1a6390d78a * templates/default/docroot/images/lock-icon.gif
New icon file.

* templates/default/directory.ezt,
* templates/default/docroot/styles.css
  Add template bits for displaying a lock-icon "overlay" for locked
  items in the directory view.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2774 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-19 20:01:39 +00:00
cmpilato 698e9db4f2 * lib/viewvc.py
(LogFormatter.get): Fix a regression introduced in 1.1.14's handling
    of log messages when not HTML-ifying them (for example, when serving
    them up via RSS).

Patch by: Christoph Sommer <christoph.sommer{__AT__}uibk.ac.at>


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2771 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-19 18:45:36 +00:00
cmpilato 163f63ed15 Fix some breakage in the annotate view for remote SVN repositories.
* lib/viewvc.py
  (markup_or_annotate): Don't forget to cross copies when requesting
    the item's log.

* lib/vclib/svn/svn_ra.py
  (RemoteSubversionRepository.itemlog): Treat 'svn_latest_log' option
    specially, as in the svn_repos case.  (Ugh.)
  (RemoteSubversionRepository.annotate): Pass 'svn_show_all_dir_logs'
    option to itemlog().  Also, upgrade to svn_client_blame2() API.
  (RemoteSubversionRepository._get_last_history_rev): Now return both
    the info-provided create_rev, and the more accurate
    last_history_rev.  Callers updated.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2770 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-19 15:26:41 +00:00
cmpilato 44ec30da8e Abstract some code into a helper function, and fix some brokenness therein.
* lib/vclib/svn/svn_ra.py
  (RemoteSubversionRepository._revinfo_fetch): New.  Holds the guts of
    the revision info harvesting (plus some bugfixes thereto) from...
  (RemoteSubversionRepository._revinfo): ...this, which now calls the
    helper function.  Also, don't tuple-ize the already-tupled cache
    info.

git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2768 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-16 01:38:39 +00:00
cmpilato 1380dba9ba Normalize some variables before hitting the Subversion API.
* lib/vclib/svn/svn_ra.py
  (client_log): Convert incoming 'cross_copies' and 'include_changes'
    values to integers.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2767 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-16 01:36:11 +00:00
cmpilato 6533b4fc7c Optimize revision info fetches for remote SVN repositories to avoid
unnecessary (and somewhat expensive) work.

* lib/vclib/svn/svn_ra.py
  (client_log): Add 'include_changes' parameter, pass to the
    Subversion log APIs.  Callers updated.
  (_revinfo): Was _revinfo_raw().  Add 'include_changed_paths'
    parameter.  Now handles the revinfo cache, only fetches changed
    paths when required, and bails out early of authz checks when
    possible.  All internal callers of revinfo() have been updated to
    use this interface instead.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2765 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-16 01:13:25 +00:00
cmpilato 6964b067e6 Fix a couple of correctness/performance regressions in the remote SVN
annotate view recently introduced.

* lib/vclib/svn/svn_ra.py
  (RemoteSubversionRepository.annotate): Pass 'svn_cross_copies'
    option to itemlog() so that annotation history isn't unnaturally
    truncated.
  (RemoteSubversionRepository._blame_cb): Only consult the revinfo
    cache when authz checks are required.  This improves the speed of
    the operation when universal read access is granted to the user.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2763 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-16 00:51:25 +00:00
cmpilato fee21df5d7 Finish, I believe, issue #353 ("Remote Subversion repositories not
fully honoring authz rules").  In doing so, this makes the svn_ra
module the most accurate it has ever been, hopefully without too
terribly much extra cost.

* lib/vclib/svn/svn_ra.py
  (RemoteSubversionRepository.listdir): No longer check access here.
    That's handled down in _get_dirents() now.
  (RemoteSubversionRepository.dirlogs): Don't check dirent access here.
    Just ensure that the returned entries are those which are
    represented in the (filtered) set return from _get_dirents().
    Also, replace the revision metadata stored on each dirent with
    values from the revinfo cache (which does authz sanitizing).
  (RemoteSubversionRepository._get_dirents): Do authz-checking of
    dirents here, and use _get_last_history_rev() to populate a useful
    created_rev.
  (RemoteSubversionRepository._get_last_history_rev): Because
    Subversion's RA layer doesn't consider copy events when
    determining an item's last-committed-rev, compensate for this with
    a bounded log operation which does.  This brings created-rev
    parity with the svn_repos module (at the cost of the extra RA
    work, but with the benefit of, you know, accuracy.
  (RemoteSubversionRepository._revinfo_raw): Leave a TODO about a
    future optimization.
  (RemoteSubversionRepository._log_cb): Set found_unreadable when
    sanitizing an unreadable copyfrom path, too.
  (RemoteSubversionRepository.created_rev): Now just a thin wrapper
    around the beefed-up _get_last_history_rev() function.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2760 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-15 23:34:01 +00:00
cmpilato ada79bc6e7 * lib/vclib/svn/svn_ra.py
(LogCollector.add_log): Allow the access_check_func to be None (and
    avoid trying to call it in that case).


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2759 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-15 23:07:22 +00:00
cmpilato 01ebe77beb Fix a security issue: When a readable path is copied from an
unreadable one, Subversion will obscure the fact that the operation
was a copy (by removing copyfrom info) and will deem the log message
for the revision in which the copy occurred to be unreadable.  ViewVC
was only doing the former bit; now it does the latter, too.

* lib/vclib/svn/svn_repos.py
  (LocalSubversionRepository._get_changed_paths): Set found_unreadable
    when we have to hide a copyfrom path, too.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2758 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-15 23:05:47 +00:00
cmpilato 87b574b3ee For issue #353, check path access in the annotation view code for
remote SVN repositories.

* lib/vclib/svn/svn_ra.py
  (RemoteSubversionRepository.annotate): Examine revision logs to
    determine the legal annotation range we are allowed to request,
    and use the revinfo cache to strip sensitive author/data info from
    the annotation data.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2757 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-15 02:17:55 +00:00
cmpilato fc7d9b1da4 For issue #353 ("Remote Subversion repositories not fully honoring
authz rules"):

* lib/vclib/svn/svn_ra.py
  (RemoteSubversionRepository.get_locations): Check authz on the
    result of a get_locations lookup (being sure to use the original
    path in the error message, if any).


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2756 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-15 02:11:12 +00:00
cmpilato 4cc840b54a For issue #353, check path access in the code that backs the revision
log view for remote SVN repositories.

* lib/vclib/svn/svn_ra.py
  (LogCollector.__init__): Add 'access_check_func' parameter, stashed
    away as a member variable.  Initialize 'done' variable to False.
  (LogCollector.add_log): Use access_check_func() to test for access.
    If access is denied, set 'done' to True and ignore future
    invocations.
  (RemoteSubversionRepository.itemlog): Add _access_checker inner
    function, passed as a callback to LogCollector.__init__().


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2755 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-13 21:57:38 +00:00
cmpilato 3df47b625e * notes/releases.txt
Add some URLs for the announce@ and freecode postings.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2753 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-12 13:02:34 +00:00
cmpilato 836e643dc5 * CHANGES: Merge in the 1.1.14 changes.
git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2752 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-12 12:57:12 +00:00
cmpilato ca52fe277d Bump latest release version number.
git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2750 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-12 12:54:04 +00:00
cmpilato bfe2cbe5ca Fix issue #246 ("Add support for issue tracker links in commit-log
viewer").

NOTE: There are some limitations here, most prominantly that commas
can't be used in the regular expressions which define replacements,
and that only match groupings 0-9 can be used in the replacement
format string.

* conf/viewvc.conf.dist
  (custom_log_formatting): New configuration option.

* lib/config.py
  (Config._force_multi_value, Config.set_defaults): Add handling of
    new 'custom_log_formatting' option.

* lib/viewvc.py
  (ViewVCHtmlFormatter.format_custom_url): New formatter callback.
  (LogFormatter.get): Register the new formatter callback for rules
    found in the 'custom_log_formatting' option value.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2746 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-06-12 11:11:18 +00:00
cmpilato 91654688a1 * templates/default/file.ezt
Fix some markup validation issues.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2743 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-04-20 21:04:14 +00:00
cmpilato 9d75ed19f8 Finish issue #506 ("Log message tokenization results could be reused
for better performance").

* lib/viewvc.py
  Replace uses of format_log() throughout with calls to LogFormatter()
  (to get a formatter "lf") then lf.get() (to get the formatted log
  string).  Also...
  (format_log): Remove as unused.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2741 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-04-17 15:29:27 +00:00
cmpilato f65b03fcdc For issue #506 ("Log message tokenization results could be reused for
better performance"), make the first step of two in trying to avoid
parsing log messages twice when once will suffice.

* lib/viewvc.py
  (ViewVCHtmlFormatterTokens): New class for generating HTML-formatted
    text from a set of provided ViewVCHtmlFormatter tokens.
  (ViewVCHtmlFormatter.get_result): Track renamed function, and defer
    the work of the text generation to the token object's get_result()
    method.
  (ViewVCHtmlFormatter.tokenize_text): Renamed from _tokenize_text(),
    and now return a ViewVCHtmlFormatterTokens object.
  (LogFormatter): New class for encapsulating the log formatting logic.
  (format_log): Make a wrapper around LogFormatter for now.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2740 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-04-17 15:25:56 +00:00
cmpilato 60b80bd3b2 Fix issue #505 ("Username case normalization breaks when browsing
anonymously").

* lib/vcauth/svnauthz/__init__.py
  (ViewVCAuthorizer.__init__): Don't try to convert a None username to
    lower- or upper-case.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2738 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-03-28 14:15:51 +00:00
cmpilato 272ae0fa37 Remove erroneous CHANGES entry.
git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2736 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-02-07 21:10:18 +00:00
cmpilato 23714979e4 Follow-up to r2512, trying to, you know, get that change right this
time.

* lib/vclib/svn/__init__.py
  (_canonicalize_path): New helper function.
  (canonicalize_rootpath): Rework this to perform the URL -> absolute
    path conversion any time it can, not only when using really old
    Subversion versions.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2735 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-02-07 21:10:04 +00:00
cmpilato 1b63870590 Follow-up to r2731, trying to ensure that users with pre-1.4 Subversion
won't hit AttributeError's on account of svn_path_canonicalize() not 
being exposed through Subversion's Python bindings.

* lib/vclib/svn/svn_repos.py
  (_canonicalize_path): New helper function.
  (_rootpath2url): Use _canonicalize_path() instead of
    core.svn_path_canonicalize().

* lib/vclib/svn/svn_ra.py
  (RemoteSubversionRepository._geturl): Use (imported)
    _canonicalize_path() instead of core.svn_path_canonicalize().


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2733 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-02-01 19:45:35 +00:00
cmpilato 1296106171 Fix issue #504 ("annotate view fails on filenames with colon (:)
characters in their names"), another in a long string of annotate view
brokennesses.  (Is that word?)  This time, the problem was a disparity
between Python's urllib encoding and what Subversion deems canonical.

* lib/vclib/svn/svn_repos.py
  (_rootpath2url): Canonicalize URLs for use with Subversion.

* lib/vclib/svn/svn_ra.py
  (RemoteSubversionRepository._geturl): Canonicalize URLs for use with
    Subversion.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2731 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-02-01 16:24:29 +00:00
cmpilato 3297f45285 * lib/vclib/svn/__init__.py
(canonicalize_rootpath): Add a TODO comment.



git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2730 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-31 22:37:32 +00:00
cmpilato 91d1b75856 * notes/releases.txt
Minor tweaks/corrections to the release procedure.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2729 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-23 18:58:02 +00:00
cmpilato 8f39d274f5 Merge 1.1.13's CHANGES.
git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2727 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-23 18:52:01 +00:00
cmpilato 86449bdec7 Bump pointer to latest version.
git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2726 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-23 18:51:45 +00:00
cmpilato 7043120d2c * tools/bump-copyright-years
(update_license): Remove.
  (bump_years): Print reminder about amending the change history
    section of the LICENSE.html file.

git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2722 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-23 18:31:20 +00:00
cmpilato ad0c0dd5fa * tools/bump-copyright-years
(replace_end_year): Remove debugging print statements, and simplify code.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2721 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-23 17:57:10 +00:00
cmpilato 9e9b82218c Bump copyright years.
git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2720 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-23 17:52:47 +00:00
cmpilato 85df9e6ba4 * tools/bump-copyright-years
New tool for bumping copyright years.  I'm tired of trying to
  micromanage these things.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2719 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-23 17:51:58 +00:00
cmpilato 8fc1166f2d Bump copyright years.
git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2716 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-23 16:42:03 +00:00
cmpilato 25ab342bbf * lib/vclib/svn/svn_repos.py
(_rootpath2url): Get the absolute path before splitting off the
    drive, not afterward.  Otherwise, (some) drive letter will just get
    tacked back onto the path!  As we now verify elsewhere that
    rootpaths aren't relative, we needn't worry that .splitdrive() will
    return a relative rootpath.

Suggested by: Jens Peters <jp7677{__AT__}gmail.com>


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2714 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-06 21:34:58 +00:00
cmpilato ccb7f2e3f1 Ensure that we are dealing with absolute repository paths. Who knows
what kind of chaos may ensue otherwise.

* conf/viewvc.conf.dist
  Note that paths should be absolute filesystem paths.

* lib/vclib/svn/__init__.py
  (canonicalize_rootpath, expand_root_parent): Assert that local
    repository paths are absolute.

* lib/vclib/ccvs/__init__.py
  (canonicalize_rootpath, expand_root_parent): Assert that local
    repository paths are absolute.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2713 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-05 15:35:39 +00:00
cmpilato 0cd9f664d6 * INSTALL
Per issue #474, describe how to setup static icon/stylesheet
  delivery, warning about alias ordering.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2712 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-04 17:19:27 +00:00
cmpilato 6fe390a642 Move a customization out of ezt.py to eliminate unnecessary deltas
against the upstream version of this module.

* lib/common.py
  (TemplateData): Moved here...

* lib/ezt.py
  ...from here.

* lib/query.py,
* lib/viewvc.py
  Import 'TemplateData' from 'common' now, and update references to this
  relocated class.

git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2711 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-04 15:35:12 +00:00
cmpilato 5d68a5f883 * lib/vclib/svn/svn_repos.py
(_rootpath2url): "drive" already carries the colon, so don't append one.


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@2709 8cb11bc2-c004-0410-86c3-e597b4017df7
2012-01-03 20:07:30 +00:00