mirror of
https://github.com/vitalif/viewvc-4intranet
synced 2019-04-16 04:14:59 +03:00
Compare commits
24 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
51298ea2b8 | ||
![]() |
51011abec8 | ||
![]() |
0bbe7f5751 | ||
![]() |
1df169ab24 | ||
![]() |
98e7612420 | ||
![]() |
70b0076d88 | ||
![]() |
e23b88d389 | ||
![]() |
336ee6b95d | ||
![]() |
642130cf93 | ||
![]() |
1e3c57f2e0 | ||
![]() |
9693f2b981 | ||
![]() |
69ab22922f | ||
![]() |
d422c3abc9 | ||
![]() |
ded0015f5c | ||
![]() |
6232555f79 | ||
![]() |
81fa4ce6fd | ||
![]() |
98378e7560 | ||
![]() |
8da2897df2 | ||
![]() |
45bca25fbc | ||
![]() |
a54b3bcbbe | ||
![]() |
2612b3bd0a | ||
![]() |
588f19cb0b | ||
![]() |
6d540deba2 | ||
![]() |
9f612d3b29 |
116
CHANGES
116
CHANGES
@@ -1,53 +1,70 @@
|
|||||||
Version 1.0 (not yet released)
|
Version 1.0.2 (released 29-Sep-2006)
|
||||||
|
|
||||||
|
* minor documentation fixes
|
||||||
|
* fix Subversion annotate functionality on Windows (issue #18)
|
||||||
|
* fix annotate assertions on uncanonicalized #include paths (issue #208)
|
||||||
|
* make RSS URL method match the method used to generate it (issue #245)
|
||||||
|
* fix Subversion annotation to run non-interactively, preventing hangs
|
||||||
|
* fix bug in custom syntax highlighter fallback logic
|
||||||
|
* fix bug in PHP CGI hack to avoid force-cgi-redirect errors
|
||||||
|
|
||||||
|
Version 1.0.1 (released 20-Jul-2006)
|
||||||
|
|
||||||
|
* fix exception on log page when use_pagesize is enabled
|
||||||
|
* fix an XHTML validation bug in the footer template (issue #239)
|
||||||
|
* fix handling of single-component CVS revision numbers (issue #237)
|
||||||
|
* fix bug in download-as-text URL link generation (issue #241)
|
||||||
|
* fix query.cgi bug, missing 'rss_href' template data item (issue #249)
|
||||||
|
* no longer omit empty Subversion directories from tarballs (issue #250)
|
||||||
|
* use actual modification time for Subversion directories in tarballs
|
||||||
|
|
||||||
|
Version 1.0 (released 01-May-2006)
|
||||||
|
|
||||||
* add support for viewing Subversion repositories
|
* add support for viewing Subversion repositories
|
||||||
* add support for running on MS Windows (2003-Feb-09)
|
* add support for running on MS Windows
|
||||||
* generate strict XHTML output (2005-Sep-08)
|
* generate strict XHTML output
|
||||||
* add support for caching by sending "Last-Modified", "Expires",
|
* add support for caching by sending "Last-Modified", "Expires",
|
||||||
"ETag", and "Cache-Control" headers (2004-Jun-03)
|
"ETag", and "Cache-Control" headers
|
||||||
* add support for Mod_Python on Apache 2.x and ASP on IIS
|
* add support for Mod_Python on Apache 2.x and ASP on IIS
|
||||||
* Several changes to standalone.py:
|
* Several changes to standalone.py:
|
||||||
- -h commandline option to specify hostname for non local use.
|
- -h commandline option to specify hostname for non local use.
|
||||||
- -r commandline option may be repeated to use more than repository
|
- -r commandline option may be repeated to use more than repository
|
||||||
before actually installing ViewCVS.
|
before actually installing ViewCVS.
|
||||||
- New GUI field to test paging.
|
- New GUI field to test paging.
|
||||||
* add new, better-integrated query interface (2004-Jul-17)
|
* add new, better-integrated query interface
|
||||||
* add integrated RSS feeds (2005-Dec-22)
|
* add integrated RSS feeds
|
||||||
* add new "root_as_url_component" option to embed root names as
|
* add new "root_as_url_component" option to embed root names as
|
||||||
path components in ViewCVS URLs for a more natural URL scheme
|
path components in ViewCVS URLs for a more natural URL scheme
|
||||||
in ViewCVS configurations with multiple repositories.
|
in ViewCVS configurations with multiple repositories.
|
||||||
(2002-Dec-12)
|
* add new "use_localtime" option to display local times instead of UTC times
|
||||||
* add new "use_localtime" option to display local times instead of
|
|
||||||
UTC times (2002-May-06)
|
|
||||||
* add new "root_parents" option to make it possible to add and
|
* add new "root_parents" option to make it possible to add and
|
||||||
remove repositories without modifying the ViewCVS configuration
|
remove repositories without modifying the ViewCVS configuration
|
||||||
(2004-Jul-16)
|
* add new "template_dir" option to facilitate switching between sets of
|
||||||
* add new "template_dir" option to facilitate switching between
|
templates
|
||||||
sets of templates (2005-Feb-08)
|
|
||||||
* add new "sort_group_dirs" option to disable grouping of
|
* add new "sort_group_dirs" option to disable grouping of
|
||||||
directories in directory listings (2005-Mar-07)
|
directories in directory listings
|
||||||
* add new "port" option to connect to a MySQL database on a nonstandard
|
* add new "port" option to connect to a MySQL database on a nonstandard port
|
||||||
port (2005-Dec-22)
|
|
||||||
* make "default_root" option optional. When no root is specified,
|
* make "default_root" option optional. When no root is specified,
|
||||||
show a page listing all available repositories (2005-Feb-04)
|
show a page listing all available repositories
|
||||||
* add "default_file_view" option to make it possible for relative
|
* add "default_file_view" option to make it possible for relative
|
||||||
links and image paths in checked out HTML files to work without
|
links and image paths in checked out HTML files to work without
|
||||||
the need for special /*checkout*/ prefixes in URLs. Deprecate
|
the need for special /*checkout*/ prefixes in URLs. Deprecate
|
||||||
"checkout_magic" option and disable by default (2006-Apr-03)
|
"checkout_magic" option and disable by default
|
||||||
|
* add "limit_changes" option to limit number of changed files shown per
|
||||||
|
commit by default in query results and in the Subversion revision view
|
||||||
* hide CVS "Attic" directories and add simple toggle for showing
|
* hide CVS "Attic" directories and add simple toggle for showing
|
||||||
dead files in directory listings (2004-Jul-31)
|
dead files in directory listings
|
||||||
* show Unified, Context and Side-by-side diffs in HTML instead of
|
* show Unified, Context and Side-by-side diffs in HTML instead of
|
||||||
in bare text pages (2004-Jun-22)
|
in bare text pages
|
||||||
* make View/Download links work the same for all file types
|
* make View/Download links work the same for all file types
|
||||||
(2004-Jan-21)
|
* add links to tip of selected branch on log page
|
||||||
* add links to tip of selected branch on log page (2005-Oct-03)
|
* allow use of "Highlight" program for colorizing
|
||||||
* allow use of "Highlight" program for colorizing (2005-Dec-20)
|
|
||||||
* enable enscript colorizing for more file types
|
* enable enscript colorizing for more file types
|
||||||
* add sorting arrows for directory views (2004-Jul-21)
|
* add sorting arrows for directory views
|
||||||
* get rid of popup windows for checkout links (2004-Jan-21)
|
* get rid of popup windows for checkout links
|
||||||
* obfuscate email addresses in html output by encoding @ symbol
|
* obfuscate email addresses in html output by encoding @ symbol
|
||||||
with an HTML character reference (2004-Jul-29)
|
with an HTML character reference
|
||||||
* add paging capability (2001-Dec-31)
|
* add paging capability
|
||||||
* Improvements to templates
|
* Improvements to templates
|
||||||
- add new template authoring guide
|
- add new template authoring guide
|
||||||
- increase coverage, use templates to produce HTML for diff pages,
|
- increase coverage, use templates to produce HTML for diff pages,
|
||||||
@@ -56,41 +73,36 @@ Version 1.0 (not yet released)
|
|||||||
- add new template variables providing ViewCVS URLs for more
|
- add new template variables providing ViewCVS URLs for more
|
||||||
links between related pages and less URL generation inside
|
links between related pages and less URL generation inside
|
||||||
templates
|
templates
|
||||||
* add new [define] EZT directive for assigning variables within
|
* add new [define] EZT directive for assigning variables within templates
|
||||||
templates (2004-Apr-21)
|
|
||||||
* add command line argument parsing to install script to allow
|
* add command line argument parsing to install script to allow
|
||||||
non-interactive installs (2005-Jan-06)
|
non-interactive installs
|
||||||
* add stricter parameter validation to lower likelihood of CSS
|
* add stricter parameter validation to lower likelihood of cross-site
|
||||||
vulnerabilities (2002-May-24)
|
scripting vulnerabilities
|
||||||
* add support for cvsweb's "mime_type=text/x-cvsweb-markup" URLs
|
* add support for cvsweb's "mime_type=text/x-cvsweb-markup" URLs
|
||||||
(2002-Oct-10)
|
* fix incompatibility with enscript 1.6.3
|
||||||
* fix incompatibility with enscript 1.6.3 (2002-Feb-05)
|
* fix bug in parsing FreeBSD rlog output
|
||||||
* fix bug in parsing FreeBSD rlog output (2003-Jul-24)
|
|
||||||
* work around rlog assumption all two digit years in RCS files are
|
* work around rlog assumption all two digit years in RCS files are
|
||||||
relative to the year 1900. (2005-Sep-30)
|
relative to the year 1900.
|
||||||
* change loginfo-handler to cope with spaces in filenames and
|
* change loginfo-handler to cope with spaces in filenames and
|
||||||
support a simpler command line invocation from CVS (2003-Feb-11)
|
support a simpler command line invocation from CVS
|
||||||
* show diff error when comparing two binary files (2002-Jan-23)
|
* make cvsdbadmin work properly when invoked on CVS subdirectory
|
||||||
* make regular expression search skip binary files (2002-Jan-17)
|
paths instead of top-level CVS root paths
|
||||||
|
* show diff error when comparing two binary files
|
||||||
|
* make regular expression search skip binary files
|
||||||
* make regular expression search skip nonversioned files in CVS
|
* make regular expression search skip nonversioned files in CVS
|
||||||
directories instead of choking on them (2002-Sep-27)
|
directories instead of choking on them
|
||||||
* fix tarball generator so it doesn't include forbidden modules
|
* fix tarball generator so it doesn't include forbidden modules
|
||||||
(2002-Feb-22)
|
|
||||||
* output "404 Not Found" errors instead of "403 Forbidden" errors
|
* output "404 Not Found" errors instead of "403 Forbidden" errors
|
||||||
to not reveal whether forbidden paths exist (2005-May-17)
|
to not reveal whether forbidden paths exist
|
||||||
* fix sorting bug in directory view (2002-Apr-18)
|
* fix sorting bug in directory view
|
||||||
* reset log and directory page numbers when leaving those pages
|
* reset log and directory page numbers when leaving those pages
|
||||||
(2005-Jan-29)
|
* reset sort direction in directory listing when clicking new columns
|
||||||
* reset sort direction in directory listing when clicking new
|
* fix "Accept-Language" handling for Netscape 4.x browsers
|
||||||
columns (2004-Jul-21)
|
* fix file descriptor leak in standalone server
|
||||||
* fix "Accept-Language" handling for Netscape 4.x browsers
|
* clean up zombie processes from running enscript
|
||||||
(2002-May-23)
|
* fix mysql "Too many connections" error in cvsdbadmin
|
||||||
* fix file descriptor leak in standalone server (2004-Jul-17)
|
* get rid of mxDateTime dependency for query database
|
||||||
* clean up zombie processes from running enscript (2002-Jun-15)
|
|
||||||
* fix mysql "Too many connections" error in cvsdbadmin (2003-Jul-24)
|
|
||||||
* get rid of mxDateTime dependency for query database (2003-Feb-09)
|
|
||||||
* store query database times in UTC instead of local time
|
* store query database times in UTC instead of local time
|
||||||
(2003-Feb-09)
|
|
||||||
* fix daylight saving time bugs in various parts of the code
|
* fix daylight saving time bugs in various parts of the code
|
||||||
|
|
||||||
Version 0.9.4 (released 17-Aug-2005)
|
Version 0.9.4 (released 17-Aug-2005)
|
||||||
|
186
INSTALL
186
INSTALL
@@ -5,7 +5,7 @@ CONTENTS
|
|||||||
APACHE CONFIGURATION
|
APACHE CONFIGURATION
|
||||||
UPGRADING VIEWVC
|
UPGRADING VIEWVC
|
||||||
SQL CHECKIN DATABASE
|
SQL CHECKIN DATABASE
|
||||||
ENSCRIPT CONFIGURATION
|
ENSCRIPT AND HIGHLIGHT CONFIGURATION
|
||||||
CVSGRAPH CONFIGURATION
|
CVSGRAPH CONFIGURATION
|
||||||
IF YOU HAVE PROBLEMS...
|
IF YOU HAVE PROBLEMS...
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ Congratulations on getting this far. :-)
|
|||||||
|
|
||||||
* a web server capable of running CGI programs
|
* a web server capable of running CGI programs
|
||||||
(for example, Apache at http://httpd.apache.org/)
|
(for example, Apache at http://httpd.apache.org/)
|
||||||
* MySQL to create and query a commit database
|
* MySQL 3.22 and MySQLdb 0.9.0 or later to create a commit database
|
||||||
(http://www.mysql.com/)
|
(http://www.mysql.com/)
|
||||||
(http://sourceforge.net/projects/mysql-python)
|
(http://sourceforge.net/projects/mysql-python)
|
||||||
* Enscript, code colorizer
|
* Enscript, code colorizer
|
||||||
@@ -53,7 +53,7 @@ Congratulations on getting this far. :-)
|
|||||||
GUI Operation:
|
GUI Operation:
|
||||||
|
|
||||||
If you just want to see what your CVS repository looks like with
|
If you just want to see what your CVS repository looks like with
|
||||||
ViewVC, type "./standalone.py -g -r /PATH/TO/CVS/ROOT". This
|
ViewVC, type "bin/standalone.py -g -r /PATH/TO/CVS/ROOT". This
|
||||||
will start a tiny webserver serving at http://localhost:7467/.
|
will start a tiny webserver serving at http://localhost:7467/.
|
||||||
PLEASE NOTE: This requires Python with thread support enabled and
|
PLEASE NOTE: This requires Python with thread support enabled and
|
||||||
the Tkinter GUI. If you don't have one of these, omit the '-g' option.
|
the Tkinter GUI. If you don't have one of these, omit the '-g' option.
|
||||||
@@ -64,41 +64,28 @@ Congratulations on getting this far. :-)
|
|||||||
To start installing right away (on UNIX): type "./viewvc-install"
|
To start installing right away (on UNIX): type "./viewvc-install"
|
||||||
in the current directory and answer the prompts. When it
|
in the current directory and answer the prompts. When it
|
||||||
finishes, edit the file viewvc.conf in the installation directory
|
finishes, edit the file viewvc.conf in the installation directory
|
||||||
to tell viewvc the paths to your CVS and Subversion repositories. Next,
|
to tell viewvc the paths to your CVS and Subversion repositories.
|
||||||
configure your web server to run <INSTALL>/cgi/viewvc.cgi, as
|
Next, configure your web server (in the way appropriate to that browser)
|
||||||
appropriate for your web server. The section `INSTALLING VIEWVC'
|
to run <VIEWVC_INSTALLATION_DIRECTORY>/bin/cgi/viewvc.cgi. The section
|
||||||
below is still recommended reading.
|
`INSTALLING VIEWVC' below is still recommended reading.
|
||||||
|
|
||||||
|
|
||||||
INSTALLING VIEWVC
|
INSTALLING VIEWVC
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
1) To get viewvc.cgi to work, make sure that you have Python 1.5 or
|
NOTE: Windows users can refer to windows/README for Windows-specific
|
||||||
greater installed and a webserver which is capable of executing
|
installation instructions.
|
||||||
CGI scripts (either based on the .cgi extension, or by placing the
|
|
||||||
script within a specific directory).
|
|
||||||
|
|
||||||
You need to have RCS installed. Specifically, "rlog", "rcsdiff",
|
1) To get viewvc.cgi to work, make sure that you have Python installed
|
||||||
and "co". This script was tested against RedHat's rcs-5.7-10.rpm
|
and a webserver which is capable of executing CGI scripts (either
|
||||||
Someone running HP-UX reported problems, that rcs doesn'nt honour
|
based on the .cgi extension, or by placing the script within a specific
|
||||||
the setting of $PATH to find the diff utility. Please test, if
|
directory).
|
||||||
"rcsdiff -u" works. If not you might have to recompile RCS.
|
|
||||||
|
|
||||||
Note, that the viewvc.cgi script needs to have READ-ONLY, physical
|
Note that to browse CVS repositories, the viewvc.cgi script needs to
|
||||||
access to the CVS repository (or a copy of it). Therefore, rsh/ssh or
|
have READ-ONLY, physical access to the repository (or a copy of it).
|
||||||
pserver access to the repository will not work.
|
Therefore, rsh/ssh or pserver access to the repository will not work.
|
||||||
|
And you need to have the RCS utilities installed, specifically "rlog",
|
||||||
For the more human readable diff formats you need a modern diff utility.
|
"rcsdiff", and "co".
|
||||||
If you are using Linux, this is no problem. But on commercial unices
|
|
||||||
you might want to install GNU-diff to be able to use unified or
|
|
||||||
side-by-side diffs.
|
|
||||||
|
|
||||||
If you want to use cvsgraph, you have to obtain and install this
|
|
||||||
separately. See below. This was tested with cvsgraph-1.5.1.
|
|
||||||
|
|
||||||
For the checkin database to work, you will need MySQL >= 3.22,
|
|
||||||
and the Python DBAPI 2.0 module, MySQLdb. This was tested with
|
|
||||||
MySQLdb 0.9.1.
|
|
||||||
|
|
||||||
2) Installation is handled by the ./viewvc-install script. Run this
|
2) Installation is handled by the ./viewvc-install script. Run this
|
||||||
script and you will be prompted for a installation root path.
|
script and you will be prompted for a installation root path.
|
||||||
@@ -131,12 +118,12 @@ INSTALLING VIEWVC
|
|||||||
then edit the files in <VIEWVC_INSTALLATION_DIRECTORY>/templates.
|
then edit the files in <VIEWVC_INSTALLATION_DIRECTORY>/templates.
|
||||||
You need knowledge about HTML to edit the templates.
|
You need knowledge about HTML to edit the templates.
|
||||||
|
|
||||||
4) The CGI programs are in <VIEWVC_INSTALLATION_DIRECTORY>/www/cgi/. You can
|
4) The CGI programs are in <VIEWVC_INSTALLATION_DIRECTORY>/bin/cgi/. You can
|
||||||
symlink to this directory from somewhere in your published HTTP server
|
symlink to this directory from somewhere in your published HTTP server
|
||||||
path if your webserver is configured to follow symbolic links. You can
|
path if your webserver is configured to follow symbolic links. You can
|
||||||
also copy the installed <VIEWVC_INSTALLATION_DIRECTORY>/www/cgi/*.cgi
|
also copy the installed <VIEWVC_INSTALLATION_DIRECTORY>/bin/cgi/*.cgi
|
||||||
scripts after the install (unlike the other files in ViewVC, the scripts
|
scripts after the install (unlike the other files in ViewVC, the scripts
|
||||||
under www/ can be moved).
|
under bin/ can be moved).
|
||||||
|
|
||||||
If you are using Apache, then see below at the section
|
If you are using Apache, then see below at the section
|
||||||
titled APACHE CONFIGURATION.
|
titled APACHE CONFIGURATION.
|
||||||
@@ -152,34 +139,36 @@ INSTALLING VIEWVC
|
|||||||
APACHE CONFIGURATION
|
APACHE CONFIGURATION
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
1) Find out where the web server configuration file is kept. On
|
1) Find out where the web server configuration file is kept. Typical
|
||||||
SuSE Linux it is /etc/httpd/httpd.conf, On RedHat Linux 7.3 it
|
locations are /etc/httpd/httpd.conf, /etc/httpd/conf/httpd.conf,
|
||||||
is /etc/httpd/conf/httpd.conf. On other unices you may look
|
and /etc/apache/httpd.conf. Depending on how apache was installed,
|
||||||
at /usr/local/etc or /etc/local. Use the vendor documentation
|
you may also look under /usr/local/etc or /etc/local. Use the vendor
|
||||||
or the find utility, if in doubt.
|
documentation or the find utility if in doubt.
|
||||||
|
|
||||||
Either METHOD A:
|
Either METHOD A:
|
||||||
2) The ScriptAlias directive is very useful for pointing
|
2) The ScriptAlias directive is very useful for pointing
|
||||||
directly to the viewvc.cgi script. Simply insert a line containing
|
directly to the viewvc.cgi script. Simply insert a line containing
|
||||||
ScriptAlias /viewvc <VIEWVC_INSTALLATION_DIRECTORY>/www/cgi/viewvc.cgi
|
|
||||||
|
ScriptAlias /viewvc <VIEWVC_INSTALLATION_DIRECTORY>/bin/cgi/viewvc.cgi
|
||||||
|
|
||||||
into your httpd.conf file. Choose the location in httpd.conf where
|
into your httpd.conf file. Choose the location in httpd.conf where
|
||||||
also the other ScriptAlias lines reside. Some examples:
|
also the other ScriptAlias lines reside. Some examples:
|
||||||
|
|
||||||
ScriptAlias /viewvc /usr/local/viewvc-1.0/www/cgi/viewvc.cgi
|
ScriptAlias /viewvc /usr/local/viewvc-1.0/bin/cgi/viewvc.cgi
|
||||||
ScriptAlias /query /usr/local/viewvc-1.0/www/cgi/query.cgi
|
ScriptAlias /query /usr/local/viewvc-1.0/bin/cgi/query.cgi
|
||||||
|
|
||||||
continue with step 3).
|
continue with step 3).
|
||||||
|
|
||||||
or alternatively METHOD B:
|
or alternatively METHOD B:
|
||||||
2) Copy the CGI scripts from
|
2) Copy the CGI scripts from
|
||||||
<VIEWVC_INSTALLATION_DIRECTORY>/www/cgi/*.cgi
|
<VIEWVC_INSTALLATION_DIRECTORY>/bin/cgi/*.cgi
|
||||||
to the /cgi-bin/ directory configured in your httpd.conf file.
|
to the /cgi-bin/ directory configured in your httpd.conf file.
|
||||||
|
|
||||||
continue with step 3).
|
continue with step 3).
|
||||||
|
|
||||||
and then there's METHOD C:
|
and then there's METHOD C:
|
||||||
2) Copy the CGI scripts from
|
2) Copy the CGI scripts from
|
||||||
<VIEWVC_INSTALLATION_DIRECTORY>/www/cgi/*.cgi
|
<VIEWVC_INSTALLATION_DIRECTORY>/bin/cgi/*.cgi
|
||||||
to the directory of your choosing in the Document Root adding the following
|
to the directory of your choosing in the Document Root adding the following
|
||||||
apache directives for the directory in httpd.conf or an .htaccess file:
|
apache directives for the directory in httpd.conf or an .htaccess file:
|
||||||
|
|
||||||
@@ -194,7 +183,7 @@ and then there's METHOD C:
|
|||||||
|
|
||||||
or if you've got Mod_Python installed you can use METHOD D:
|
or if you've got Mod_Python installed you can use METHOD D:
|
||||||
2) Copy the Python scripts and .htaccess file from
|
2) Copy the Python scripts and .htaccess file from
|
||||||
<VIEWVC_INSTALLATION_DIRECTORY>/www/mod_python/
|
<VIEWVC_INSTALLATION_DIRECTORY>/bin/mod_python/
|
||||||
to a directory being served by apache.
|
to a directory being served by apache.
|
||||||
|
|
||||||
In httpd.conf, make sure that "AllowOverride All" or at least
|
In httpd.conf, make sure that "AllowOverride All" or at least
|
||||||
@@ -207,11 +196,12 @@ or if you've got Mod_Python installed you can use METHOD D:
|
|||||||
|
|
||||||
continue with step 3).
|
continue with step 3).
|
||||||
|
|
||||||
3) Restart apache. On SuSE Linux this is done using the command
|
3) Restart apache. The commands to do this vary. "httpd -k restart" and
|
||||||
rcapache restart and on RedHat Linux this is done using the command
|
"apache -k restart" are two common variants. On RedHat Linux it is
|
||||||
/sbin/service httpd restart
|
done using the command "/sbin/service httpd restart" and on SuSE Linux
|
||||||
|
it is done with "rcapache restart"
|
||||||
|
|
||||||
4) Optional: adding access control:
|
4) Optional: Add access control.
|
||||||
|
|
||||||
In your httpd.conf you can control access to certain modules by adding
|
In your httpd.conf you can control access to certain modules by adding
|
||||||
directives like this:
|
directives like this:
|
||||||
@@ -224,21 +214,19 @@ or if you've got Mod_Python installed you can use METHOD D:
|
|||||||
require valid-user
|
require valid-user
|
||||||
</Location>
|
</Location>
|
||||||
|
|
||||||
This idea is courtesy to Nick Bauman from http://www.cortexity.com/
|
WARNING: If you enable the "checkout_magic" or "allow_tar" options, you
|
||||||
|
will need to add additional location directives to prevent people
|
||||||
If you use access control, it is recommended that you disable the
|
from sneaking in with URLs like:
|
||||||
checkout_magic option so people can't "sneak in" with URLs like
|
|
||||||
|
|
||||||
http://<server_name>/viewvc/*checkout*/<module_name>
|
http://<server_name>/viewvc/*checkout*/<module_name>
|
||||||
http://<server_name>/viewvc/~checkout~/<module_name>
|
http://<server_name>/viewvc/~checkout~/<module_name>
|
||||||
|
http://<server_name>/viewvc/<module_name>.tar.gz?view=tar
|
||||||
and get access to seeing the file contents.
|
|
||||||
|
|
||||||
|
|
||||||
UPGRADING VIEWVC
|
UPGRADING VIEWVC
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
Please read the file upgrading.html in the website subdirectory or
|
Please read the file upgrading.html in the viewvc.org/ subdirectory or
|
||||||
at <http://viewvc.org/upgrading.html>.
|
at <http://viewvc.org/upgrading.html>.
|
||||||
|
|
||||||
|
|
||||||
@@ -252,15 +240,13 @@ database. In fact, the databases are 100% compatible.
|
|||||||
Various queries can be performed on the database. After installing ViewVC,
|
Various queries can be performed on the database. After installing ViewVC,
|
||||||
there are some additional steps required to get the database working.
|
there are some additional steps required to get the database working.
|
||||||
|
|
||||||
1) You need MySQL >= 3.22, and the Python module MySQLdb 0.9.0 installed.
|
1) You need MySQL and MySQLdb (a Python DBAPI 2.0 module) installed.
|
||||||
Python 1.5.2 is REQUIRED by MySQLdb, therefore to use this part of
|
|
||||||
ViewVC you must be using Python 1.5.2.
|
|
||||||
|
|
||||||
2) You need to create a MySQL user who has permission to create databases.
|
2) You need to create a MySQL user who has permission to create databases.
|
||||||
Optionally, you can create a second user with read-only access to the
|
Optionally, you can create a second user with read-only access to the
|
||||||
database.
|
database.
|
||||||
|
|
||||||
3) Run the <VIEWVC_INSTALLATION_DIRECTORY>/make-database script. It will
|
3) Run the <VIEWVC_INSTALLATION_DIRECTORY>/bin/make-database script. It will
|
||||||
prompt you for your MySQL user, password, and the name of database you
|
prompt you for your MySQL user, password, and the name of database you
|
||||||
want to create. The database name defaults to "ViewVC". This script
|
want to create. The database name defaults to "ViewVC". This script
|
||||||
creates the database and sets up the empty tables. If you run this on a
|
creates the database and sets up the empty tables. If you run this on a
|
||||||
@@ -299,7 +285,7 @@ there are some additional steps required to get the database working.
|
|||||||
To get real-time updates, you'll want to checkout the CVSROOT module
|
To get real-time updates, you'll want to checkout the CVSROOT module
|
||||||
from your CVS repository and edit CVSROOT/loginfo. Add the line:
|
from your CVS repository and edit CVSROOT/loginfo. Add the line:
|
||||||
|
|
||||||
ALL <VIEWVC_INSTALLATION_DIRECTORY>/loginfo-handler %{sVv}
|
ALL <VIEWVC_INSTALLATION_DIRECTORY>/bin/loginfo-handler %{sVv}
|
||||||
|
|
||||||
If you have other scripts invoked by CVSROOT/loginfo, you will want
|
If you have other scripts invoked by CVSROOT/loginfo, you will want
|
||||||
to make sure to change any running under the "DEFAULT" keyword to
|
to make sure to change any running under the "DEFAULT" keyword to
|
||||||
@@ -309,7 +295,7 @@ there are some additional steps required to get the database working.
|
|||||||
If you are running the Unix port of CVS-NT, you'll need to use a
|
If you are running the Unix port of CVS-NT, you'll need to use a
|
||||||
slightly different command line:
|
slightly different command line:
|
||||||
|
|
||||||
ALL <VIEWVC_INSTALLATION_DIRECTORY>/loginfo-handler %{sVv} cvsnt
|
ALL <VIEWVC_INSTALLATION_DIRECTORY>/bin/loginfo-handler %{sVv} cvsnt
|
||||||
|
|
||||||
The extra 'cvsnt' parameter tells the handler script to parse the
|
The extra 'cvsnt' parameter tells the handler script to parse the
|
||||||
commit information in a different way.
|
commit information in a different way.
|
||||||
@@ -330,7 +316,7 @@ there are some additional steps required to get the database working.
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
REPOS="$1"
|
REPOS="$1"
|
||||||
REV="$2"
|
REV="$2"
|
||||||
<VIEWVC_INSTALLATION_DIRECTORY>/svndbadmin rebuild "$REPOS" "$REV"
|
<VIEWVC_INSTALLATION_DIRECTORY>/bin/svndbadmin rebuild "$REPOS" "$REV"
|
||||||
|
|
||||||
If you allow revision property changes in your repository, create a
|
If you allow revision property changes in your repository, create a
|
||||||
post-revprop-change hook script containing the same commands as the
|
post-revprop-change hook script containing the same commands as the
|
||||||
@@ -338,40 +324,26 @@ there are some additional steps required to get the database working.
|
|||||||
stays consistent when you change the svn:log, svn:author or
|
stays consistent when you change the svn:log, svn:author or
|
||||||
svn:date revision properties.
|
svn:date revision properties.
|
||||||
|
|
||||||
6) You may want to modify the HTML template file:
|
6) You should be ready to go. Click one of the "Query revision history"
|
||||||
|
links in ViewVC directory listings and give it a try.
|
||||||
<VIEWVC_INSTALLATION_DIRECTORY>/templates/query.ezt
|
|
||||||
|
|
||||||
This is used by the query.cgi script to generate part of its HTML output.
|
|
||||||
At some point the currently hardcoded table output will also vanish.
|
|
||||||
|
|
||||||
7) You should be ready to go. Load up the query.cgi script and give
|
|
||||||
it a try.
|
|
||||||
|
|
||||||
|
|
||||||
ENSCRIPT CONFIGURATION
|
ENSCRIPT AND HIGHLIGHT CONFIGURATION
|
||||||
----------------------
|
------------------------------------
|
||||||
|
|
||||||
Enscript is program that can colorize sourcecode of a lot of languages.
|
Enscript and Highlight are programs that can colorize source code for
|
||||||
Linux distributions like for example SuSE Linux from at least 7.0
|
a lot of languages. ViewVC can be configured to use either one.
|
||||||
up to the recently released 7.3 already contain a precompiled and
|
|
||||||
configured enscript 1.6.2 package.
|
|
||||||
|
|
||||||
1) Download genscript from http://www.codento.com/people/mtr/genscript/
|
1) Install Enscript or Highlight using your system's package manager
|
||||||
|
or downloading from the project home pages.
|
||||||
|
|
||||||
2) Configure and compile per instructions with enscript.
|
2) Set the 'use_enscript' or 'use_highlight' options in viewvc.conf to 1.
|
||||||
(I 've not done this, since I'm using the precompiled package
|
|
||||||
delivered with SuSE Linux)
|
|
||||||
|
|
||||||
3) Set the 'use_enscript' option in viewvc.conf to 1.
|
3) You may also need to set 'enscript_path' and 'highlight_path' options
|
||||||
|
if the executables are not located on the system PATH.
|
||||||
|
|
||||||
4) That's it!
|
4) That's it!
|
||||||
|
|
||||||
5) If you want to colorize exotic languages, you might have to
|
|
||||||
patch 'lib/viewvc.py' and add a new highlighting file to enscript.
|
|
||||||
For example, if you are interested in a patch for Modula-2 support,
|
|
||||||
send mail to pefu@sourceforge.net.
|
|
||||||
|
|
||||||
|
|
||||||
CVSGRAPH CONFIGURATION
|
CVSGRAPH CONFIGURATION
|
||||||
----------------------
|
----------------------
|
||||||
@@ -380,39 +352,23 @@ CvsGraph is a program that can display a clickable, graphical tree
|
|||||||
of files in a CVS repository.
|
of files in a CVS repository.
|
||||||
|
|
||||||
WARNING: Under certain circumstances (many revisions of a file
|
WARNING: Under certain circumstances (many revisions of a file
|
||||||
or many branches or both) cvsgraph can generate very huge images.
|
or many branches or both) CvsGraph can generate very huge images.
|
||||||
Especially on thin clients these images may crash the Web-Browser.
|
Especially on thin clients these images may crash the Web-Browser.
|
||||||
Currently there is no known way to avoid this behavior of cvsgraph.
|
Currently there is no known way to avoid this behavior of CvsGraph.
|
||||||
So you have been warned!
|
So you have been warned!
|
||||||
|
|
||||||
Nevertheless cvsgraph can be quite helpful on repositories with
|
Nevertheless, CvsGraph can be quite helpful on repositories with
|
||||||
a reasonable number of revisions and branches.
|
a reasonable number of revisions and branches.
|
||||||
|
|
||||||
1) Install viewvc according to instructions in 'INSTALLING
|
1) Install CvsGraph using your system's package manager or downloading
|
||||||
VIEWVC' section above. The installation directory is where
|
from the project home page.
|
||||||
the 'viewvc-install' script copied and configured the viewvc
|
|
||||||
programs.
|
|
||||||
|
|
||||||
2) Download CvsGraph from http://www.akhphd.au.dk/~bertho/cvsgraph/
|
2) Set the 'use_cvsgraph' options in viewvc.conf to 1.
|
||||||
|
|
||||||
3) Configure and compile per instructions with CvsGraph. I had
|
3) You may also need to set the 'cvsgraph_path' option if the
|
||||||
problems with 'configure' finding the gd library. Had to create
|
CvsGraph executable is not located on the system PATH.
|
||||||
a link from libgd.so to libgd.do.4.0.0. On Solaris you might
|
|
||||||
want to edit the link command line and add the option -R if
|
|
||||||
you have you libraries at non-standard location.
|
|
||||||
|
|
||||||
4) Place the 'cvsgraph' executable into a directory readable by the
|
4) There is a file <VIEWVC_INSTALLATION_DIRECTORY>/cvsgraph.conf that
|
||||||
userid running the web server. (default is '/usr/local/bin' if
|
|
||||||
you simply type 'make install' in the cvsgraph directory).
|
|
||||||
|
|
||||||
5) Check the setting of the 'cvsgraph_path' option in viewvc.conf:
|
|
||||||
/usr/local/bin/ is most often NOT contained in $PATH of the
|
|
||||||
webserver process (e.g. Apache), so you will have to edit this.
|
|
||||||
Set the 'use_cvsgraph' option in viewvc.conf to 1.
|
|
||||||
|
|
||||||
6) That's it!
|
|
||||||
|
|
||||||
7) There is a file <VIEWVC_INSTALLATION_DIRECTORY>/cvsgraph.conf that
|
|
||||||
you may want to edit if desired to set color and font characteristics.
|
you may want to edit if desired to set color and font characteristics.
|
||||||
See the cvsgraph.conf documentation. No edits are required in
|
See the cvsgraph.conf documentation. No edits are required in
|
||||||
cvsgraph.conf for operation with viewvc.
|
cvsgraph.conf for operation with viewvc.
|
||||||
@@ -421,8 +377,8 @@ a reasonable number of revisions and branches.
|
|||||||
SUBVERSION INTEGRATION
|
SUBVERSION INTEGRATION
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
ViewVC now supports browsing of Subversion repositories. To use
|
ViewVC supports browsing of Subversion repositories. To use ViewVC
|
||||||
ViewVC with Subversion, make sure you have both Subversion itself and
|
with Subversion, make sure you have both Subversion itself and
|
||||||
the Subversion Python bindings installed. See Subversion's
|
the Subversion Python bindings installed. See Subversion's
|
||||||
installation notes for more details on how to build and install these
|
installation notes for more details on how to build and install these
|
||||||
items.
|
items.
|
||||||
|
35
lib/blame.py
35
lib/blame.py
@@ -42,25 +42,28 @@ def link_includes(text, repos, path_parts, include_url):
|
|||||||
match = re_includes.match(text)
|
match = re_includes.match(text)
|
||||||
if match:
|
if match:
|
||||||
incfile = match.group(3)
|
incfile = match.group(3)
|
||||||
|
include_path_parts = path_parts[:-1]
|
||||||
|
for part in filter(None, string.split(incfile, '/')):
|
||||||
|
if part == "..":
|
||||||
|
if not include_path_parts:
|
||||||
|
# nothing left to pop; don't bother marking up this include.
|
||||||
|
return text
|
||||||
|
include_path_parts.pop()
|
||||||
|
elif part and part != ".":
|
||||||
|
include_path_parts.append(part)
|
||||||
|
|
||||||
# check current directory and parent directory for file
|
include_path = None
|
||||||
for depth in (-1, -2):
|
try:
|
||||||
include_path = path_parts[:depth] + [incfile]
|
if repos.itemtype(include_path_parts, None) == vclib.FILE:
|
||||||
try:
|
include_path = string.join(include_path_parts, '/')
|
||||||
# will throw if path doesn't exist
|
except vclib.ItemNotFound:
|
||||||
if repos.itemtype(include_path, None) == vclib.FILE:
|
pass
|
||||||
break
|
|
||||||
except vclib.ItemNotFound:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
include_path = None
|
|
||||||
|
|
||||||
if include_path:
|
if include_path:
|
||||||
url = string.replace(include_url, '/WHERE/',
|
return '#%sinclude%s<a href="%s">"%s"</a>' % \
|
||||||
string.join(include_path, '/'))
|
(match.group(1), match.group(2),
|
||||||
return '#%sinclude%s<a href="%s">"%s"</a>' % \
|
string.replace(include_url, '/WHERE/', include_path), incfile)
|
||||||
(match.group(1), match.group(2), url, incfile)
|
|
||||||
|
|
||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
@@ -403,6 +403,7 @@ def main(server, cfg, viewvc_link):
|
|||||||
'query' : query,
|
'query' : query,
|
||||||
'commits' : commits,
|
'commits' : commits,
|
||||||
'num_commits' : len(commits),
|
'num_commits' : len(commits),
|
||||||
|
'rss_href' : None,
|
||||||
}
|
}
|
||||||
|
|
||||||
if form_data.hours:
|
if form_data.hours:
|
||||||
|
@@ -474,7 +474,7 @@ def _tag_tuple(revision_string):
|
|||||||
t = map(int, string.split(revision_string, '.'))
|
t = map(int, string.split(revision_string, '.'))
|
||||||
l = len(t)
|
l = len(t)
|
||||||
if l == 1:
|
if l == 1:
|
||||||
raise ValueError
|
return ()
|
||||||
if l > 2 and t[-2] == 0 and l % 2 == 0:
|
if l > 2 and t[-2] == 0 and l % 2 == 0:
|
||||||
del t[-2]
|
del t[-2]
|
||||||
return tuple(t)
|
return tuple(t)
|
||||||
@@ -670,7 +670,8 @@ def _parse_log_header(fp):
|
|||||||
_re_log_info = re.compile(r'^date:\s+([^;]+);'
|
_re_log_info = re.compile(r'^date:\s+([^;]+);'
|
||||||
r'\s+author:\s+([^;]+);'
|
r'\s+author:\s+([^;]+);'
|
||||||
r'\s+state:\s+([^;]+);'
|
r'\s+state:\s+([^;]+);'
|
||||||
r'(\s+lines:\s+([0-9\s+-]+))?\n$')
|
r'(\s+lines:\s+([0-9\s+-]+);?)?'
|
||||||
|
r'(\s+commitid:\s+([a-zA-Z0-9]+))?\n$')
|
||||||
### _re_rev should be updated to extract the "locked" flag
|
### _re_rev should be updated to extract the "locked" flag
|
||||||
_re_rev = re.compile(r'^revision\s+([0-9.]+).*')
|
_re_rev = re.compile(r'^revision\s+([0-9.]+).*')
|
||||||
def _parse_log_entry(fp):
|
def _parse_log_entry(fp):
|
||||||
|
@@ -483,10 +483,18 @@ class BlameSource:
|
|||||||
self.last = None
|
self.last = None
|
||||||
self.first_rev = first_rev
|
self.first_rev = first_rev
|
||||||
|
|
||||||
|
# Do a little dance to get a URL that works in both Unix-y and
|
||||||
|
# Windows worlds.
|
||||||
rootpath = os.path.abspath(rootpath)
|
rootpath = os.path.abspath(rootpath)
|
||||||
|
if rootpath and rootpath[0] != '/':
|
||||||
|
rootpath = '/' + rootpath
|
||||||
|
if os.sep != '/':
|
||||||
|
rootpath = string.replace(rootpath, os.sep, '/')
|
||||||
|
|
||||||
url = 'file://' + string.join([rootpath, fs_path], "/")
|
url = 'file://' + string.join([rootpath, fs_path], "/")
|
||||||
fp = popen.popen(svn_client_path,
|
fp = popen.popen(svn_client_path,
|
||||||
('blame', "-r%d" % int(rev), "%s@%d" % (url, int(rev))),
|
('blame', "-r%d" % int(rev), "--non-interactive",
|
||||||
|
"%s@%d" % (url, int(rev))),
|
||||||
'rb', 1)
|
'rb', 1)
|
||||||
self.fp = fp
|
self.fp = fp
|
||||||
|
|
||||||
|
116
lib/viewvc.py
116
lib/viewvc.py
@@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# -----------------------------------------------------------------------
|
# -----------------------------------------------------------------------
|
||||||
|
|
||||||
__version__ = '1.0-dev'
|
__version__ = '1.0.2'
|
||||||
|
|
||||||
# this comes from our library; measure the startup time
|
# this comes from our library; measure the startup time
|
||||||
import debug
|
import debug
|
||||||
@@ -272,7 +272,9 @@ class Request:
|
|||||||
# If this is using an old-style 'rev' parameter, redirect to new hotness.
|
# If this is using an old-style 'rev' parameter, redirect to new hotness.
|
||||||
# Subversion URLs will now use 'pathrev'; CVS ones use 'revision'.
|
# Subversion URLs will now use 'pathrev'; CVS ones use 'revision'.
|
||||||
if self.repos and self.query_dict.has_key('rev'):
|
if self.repos and self.query_dict.has_key('rev'):
|
||||||
if self.roottype == 'svn' and not self.query_dict.has_key('pathrev'):
|
if self.roottype == 'svn' \
|
||||||
|
and not self.query_dict.has_key('pathrev') \
|
||||||
|
and not self.view_func == view_revision:
|
||||||
self.query_dict['pathrev'] = self.query_dict['rev']
|
self.query_dict['pathrev'] = self.query_dict['rev']
|
||||||
del self.query_dict['rev']
|
del self.query_dict['rev']
|
||||||
else: # elif not self.query_dict.has_key('revision'): ?
|
else: # elif not self.query_dict.has_key('revision'): ?
|
||||||
@@ -944,7 +946,7 @@ def get_file_view_info(request, where, rev=None, mime_type=None, pathrev=-1):
|
|||||||
pathtype=vclib.FILE,
|
pathtype=vclib.FILE,
|
||||||
params={'content-type': 'text/plain',
|
params={'content-type': 'text/plain',
|
||||||
'revision': rev,
|
'revision': rev,
|
||||||
'pathrev': rev},
|
'pathrev': pathrev},
|
||||||
escape=1)
|
escape=1)
|
||||||
if request.cfg.options.allow_annotate:
|
if request.cfg.options.allow_annotate:
|
||||||
annotate_href = request.get_url(view_func=view_annotate,
|
annotate_href = request.get_url(view_func=view_annotate,
|
||||||
@@ -1311,18 +1313,15 @@ def markup_stream_php(fp, cfg):
|
|||||||
if not cfg.options.use_php:
|
if not cfg.options.use_php:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
sys.stdout.flush()
|
# The following HACK may be be used to allow a PHP CGI executable to be
|
||||||
|
# invoked instead of a CLI executable, on systems that do not have PHP's
|
||||||
# clearing the following environment variables prevents a
|
# CLI (command line interface) installed. Just uncomment the following lines:
|
||||||
# "No input file specified" error from the php cgi executable
|
#os.unsetenv("SERVER_SOFTWARE")
|
||||||
# when ViewVC is running under a cgi environment. when the
|
#os.unsetenv("SERVER_NAME")
|
||||||
# php cli executable is used they can be left alone
|
#os.unsetenv("GATEWAY_INTERFACE")
|
||||||
#
|
#os.unsetenv("REQUEST_METHOD")
|
||||||
#os.putenv("GATEWAY_INTERFACE", "")
|
#os.unsetenv("SCRIPT_FILENAME")
|
||||||
#os.putenv("PATH_TRANSLATED", "")
|
#os.unsetenv("PATH_TRANSLATED")
|
||||||
#os.putenv("REQUEST_METHOD", "")
|
|
||||||
#os.putenv("SERVER_NAME", "")
|
|
||||||
#os.putenv("SERVER_SOFTWARE", "")
|
|
||||||
|
|
||||||
return MarkupPHP(cfg.options.php_exe_path, fp)
|
return MarkupPHP(cfg.options.php_exe_path, fp)
|
||||||
|
|
||||||
@@ -1423,14 +1422,17 @@ def view_markup(request):
|
|||||||
streamer = markup_streamers.get(ext)
|
streamer = markup_streamers.get(ext)
|
||||||
if streamer:
|
if streamer:
|
||||||
markup_fp = streamer(fp, cfg)
|
markup_fp = streamer(fp, cfg)
|
||||||
elif cfg.options.use_enscript:
|
|
||||||
markup_fp = MarkupEnscript(cfg, fp, request.path_parts[-1])
|
|
||||||
elif cfg.options.use_highlight:
|
|
||||||
markup_fp = MarkupHighlight(cfg, fp, request.path_parts[-1])
|
|
||||||
|
|
||||||
# If no one has a suitable markup handler, we'll use the default.
|
# If there wasn't a custom streamer, or the streamer wasn't enabled, we'll
|
||||||
if not markup_fp:
|
# try to use one of the configured syntax highlighting programs.
|
||||||
markup_fp = MarkupPipeWrapper(fp)
|
if not markup_fp:
|
||||||
|
if cfg.options.use_enscript:
|
||||||
|
markup_fp = MarkupEnscript(cfg, fp, request.path_parts[-1])
|
||||||
|
elif cfg.options.use_highlight:
|
||||||
|
markup_fp = MarkupHighlight(cfg, fp, request.path_parts[-1])
|
||||||
|
else:
|
||||||
|
# If no one has a suitable markup handler, we'll use the default.
|
||||||
|
markup_fp = MarkupPipeWrapper(fp)
|
||||||
|
|
||||||
data['markup'] = markup_fp
|
data['markup'] = markup_fp
|
||||||
|
|
||||||
@@ -2121,7 +2123,7 @@ def view_log(request):
|
|||||||
if cfg.options.use_pagesize:
|
if cfg.options.use_pagesize:
|
||||||
data['log_pagestart'] = int(request.query_dict.get('log_pagestart',0))
|
data['log_pagestart'] = int(request.query_dict.get('log_pagestart',0))
|
||||||
data['entries'] = paging(data, 'entries', data['log_pagestart'],
|
data['entries'] = paging(data, 'entries', data['log_pagestart'],
|
||||||
'revision', cfg.options.use_pagesize)
|
'rev', cfg.options.use_pagesize)
|
||||||
|
|
||||||
request.server.header()
|
request.server.header()
|
||||||
generate_page(request, "log", data)
|
generate_page(request, "log", data)
|
||||||
@@ -2828,7 +2830,7 @@ def generate_tarball_header(out, name, size=0, mode=None, mtime=0,
|
|||||||
|
|
||||||
out.write(block)
|
out.write(block)
|
||||||
|
|
||||||
def generate_tarball(out, request, reldir, stack):
|
def generate_tarball(out, request, reldir, stack, dir_mtime=None):
|
||||||
# get directory info from repository
|
# get directory info from repository
|
||||||
rep_path = request.path_parts + reldir
|
rep_path = request.path_parts + reldir
|
||||||
entries = request.repos.listdir(rep_path, request.pathrev, {})
|
entries = request.repos.listdir(rep_path, request.pathrev, {})
|
||||||
@@ -2845,30 +2847,43 @@ def generate_tarball(out, request, reldir, stack):
|
|||||||
if reldir:
|
if reldir:
|
||||||
tar_dir = tar_dir + _path_join(reldir) + '/'
|
tar_dir = tar_dir + _path_join(reldir) + '/'
|
||||||
|
|
||||||
# Subdirectory datestamps will be the youngest of the datestamps of
|
|
||||||
# version items (files for CVS, files or dirs for Subversion) in
|
|
||||||
# that subdirectory.
|
|
||||||
latest_date = 0
|
|
||||||
cvs = request.roottype == 'cvs'
|
cvs = request.roottype == 'cvs'
|
||||||
for file in entries:
|
|
||||||
# Skip dead or busted CVS files, and CVS subdirs.
|
# If our caller doesn't dictate a datestamp to use for the current
|
||||||
if (cvs and (file.kind != vclib.FILE or (file.rev is None or file.dead))):
|
# directory, its datestamps will be the youngest of the datestamps
|
||||||
continue
|
# of versioned items in that subdirectory. We'll be ignoring dead
|
||||||
if file.date > latest_date:
|
# or busted items and, in CVS, subdirs.
|
||||||
latest_date = file.date
|
if dir_mtime is None:
|
||||||
|
dir_mtime = 0
|
||||||
|
for file in entries:
|
||||||
|
if cvs and (file.kind != vclib.FILE or file.rev is None or file.dead):
|
||||||
|
continue
|
||||||
|
if file.date > dir_mtime:
|
||||||
|
dir_mtime = file.date
|
||||||
|
|
||||||
# push directory onto stack. it will only be included in the tarball if
|
# Push current directory onto the stack.
|
||||||
# files are found underneath it
|
|
||||||
stack.append(tar_dir)
|
stack.append(tar_dir)
|
||||||
|
|
||||||
|
# If this is Subversion, we generate a header for this directory
|
||||||
|
# regardless of its contents. For CVS it will only get into the
|
||||||
|
# tarball if it has files underneath it, which we determine later.
|
||||||
|
if not cvs:
|
||||||
|
generate_tarball_header(out, tar_dir, mtime=dir_mtime)
|
||||||
|
|
||||||
|
# Run through the files in this directory, skipping busted ones.
|
||||||
for file in entries:
|
for file in entries:
|
||||||
if (file.kind != vclib.FILE or
|
if file.kind != vclib.FILE:
|
||||||
(cvs and (file.rev is None or file.dead))):
|
continue
|
||||||
|
if cvs and (file.rev is None or file.dead):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for dir in stack:
|
# If we get here, we've seen at least one valid file in the
|
||||||
generate_tarball_header(out, dir, mtime=latest_date)
|
# current directory. For CVS, we need to make sure there are
|
||||||
del stack[:]
|
# directory parents to contain it, so we flush the stack.
|
||||||
|
if cvs:
|
||||||
|
for dir in stack:
|
||||||
|
generate_tarball_header(out, dir, mtime=dir_mtime)
|
||||||
|
del stack[:]
|
||||||
|
|
||||||
if cvs:
|
if cvs:
|
||||||
info = os.stat(file.path)
|
info = os.stat(file.path)
|
||||||
@@ -2876,7 +2891,8 @@ def generate_tarball(out, request, reldir, stack):
|
|||||||
else:
|
else:
|
||||||
mode = 0644
|
mode = 0644
|
||||||
|
|
||||||
### read the whole file into memory? bad... better to do 2 passes
|
### FIXME: Read the whole file into memory? Bad... better to do
|
||||||
|
### 2 passes.
|
||||||
fp = request.repos.openfile(rep_path + [file.name], request.pathrev)[0]
|
fp = request.repos.openfile(rep_path + [file.name], request.pathrev)[0]
|
||||||
contents = fp.read()
|
contents = fp.read()
|
||||||
fp.close()
|
fp.close()
|
||||||
@@ -2886,21 +2902,22 @@ def generate_tarball(out, request, reldir, stack):
|
|||||||
out.write(contents)
|
out.write(contents)
|
||||||
out.write('\0' * (511 - ((len(contents) + 511) % 512)))
|
out.write('\0' * (511 - ((len(contents) + 511) % 512)))
|
||||||
|
|
||||||
# recurse into subdirectories
|
# Recurse into subdirectories, skipping busted ones.
|
||||||
for file in entries:
|
for file in entries:
|
||||||
if file.errors or file.kind != vclib.DIR:
|
if file.errors or file.kind != vclib.DIR:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# skip forbidden/hidden directories (top-level only)
|
# Skip forbidden/hidden directories (top-level only).
|
||||||
if not rep_path:
|
if not rep_path:
|
||||||
if (request.cfg.is_forbidden(file.name)
|
if (request.cfg.is_forbidden(file.name)
|
||||||
or (cvs and request.cfg.options.hide_cvsroot
|
or (cvs and request.cfg.options.hide_cvsroot
|
||||||
and file.name == 'CVSROOT')):
|
and file.name == 'CVSROOT')):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
generate_tarball(out, request, reldir + [file.name], stack)
|
mtime = request.roottype == 'svn' and file.date or None
|
||||||
|
generate_tarball(out, request, reldir + [file.name], stack, mtime)
|
||||||
|
|
||||||
# pop directory (if it's being pruned. otherwise stack is already empty)
|
# Pop the current directory from the stack.
|
||||||
del stack[-1:]
|
del stack[-1:]
|
||||||
|
|
||||||
def download_tarball(request):
|
def download_tarball(request):
|
||||||
@@ -2914,6 +2931,8 @@ def download_tarball(request):
|
|||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
fp = popen.pipe_cmds([('gzip', '-c', '-n')])
|
fp = popen.pipe_cmds([('gzip', '-c', '-n')])
|
||||||
|
|
||||||
|
### FIXME: For Subversion repositories, we can get the real mtime of the
|
||||||
|
### top-level directory here.
|
||||||
generate_tarball(fp, request, [], [])
|
generate_tarball(fp, request, [], [])
|
||||||
|
|
||||||
fp.write('\0' * 1024)
|
fp.write('\0' * 1024)
|
||||||
@@ -3186,8 +3205,9 @@ def build_commit(request, files, limited_files, dir_strip):
|
|||||||
commit.rss_date = make_rss_time_string(files[0].GetTime(), request.cfg)
|
commit.rss_date = make_rss_time_string(files[0].GetTime(), request.cfg)
|
||||||
if request.roottype == 'svn':
|
if request.roottype == 'svn':
|
||||||
commit.rev = files[0].GetRevision()
|
commit.rev = files[0].GetRevision()
|
||||||
commit.rss_url = 'http://%s%s' % \
|
commit.rss_url = '%s://%s%s' % \
|
||||||
(request.server.getenv("HTTP_HOST"),
|
(request.server.getenv("HTTPS") == "on" and "https" or "http",
|
||||||
|
request.server.getenv("HTTP_HOST"),
|
||||||
request.get_url(view_func=view_revision,
|
request.get_url(view_func=view_revision,
|
||||||
params={'revision': commit.rev},
|
params={'revision': commit.rev},
|
||||||
escape=1))
|
escape=1))
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><address>[cfg.general.address]</address></td>
|
<td><address>[cfg.general.address]</address></td>
|
||||||
<td style="text-align: right;"><strong><a href="[help_href]">ViewVC Help</strong></td>
|
<td style="text-align: right;"><strong><a href="[help_href]">ViewVC Help</a></strong></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Powered by <a href="http://viewvc.tigris.org/">ViewVC [vsn]</a></td>
|
<td>Powered by <a href="http://viewvc.tigris.org/">ViewVC [vsn]</a></td>
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
<th>Jump to revision:</th>
|
<th>Jump to revision:</th>
|
||||||
<td>
|
<td>
|
||||||
[jump_rev_hidden_values]
|
[jump_rev_hidden_values]
|
||||||
<input type="text" name="rev" value="[rev]" />
|
<input type="text" name="revision" value="[rev]" />
|
||||||
<input type="submit" value="Go" />
|
<input type="submit" value="Go" />
|
||||||
[if-any prev_href]
|
[if-any prev_href]
|
||||||
<a href="[prev_href]"><img src="[docroot]/images/back.png" alt="Previous" width="20" height="22" /></a>[end]
|
<a href="[prev_href]"><img src="[docroot]/images/back.png" alt="Previous" width="20" height="22" /></a>[end]
|
||||||
|
@@ -459,6 +459,10 @@ highlight_convert_tabs = 2
|
|||||||
use_php = 0
|
use_php = 0
|
||||||
|
|
||||||
# path to php executable
|
# path to php executable
|
||||||
|
# (This should be set to the path of a PHP CLI executable, not the path
|
||||||
|
# to a CGI executable. If you use a CGI executable, you may see "no input file
|
||||||
|
# specified" or "force-cgi-redirect" errors instead of colorized source. The
|
||||||
|
# output of "php -v" tells you whether an given executable is CLI or CGI.)
|
||||||
php_exe_path = php
|
php_exe_path = php
|
||||||
# php_exe_path = /usr/local/bin/php
|
# php_exe_path = /usr/local/bin/php
|
||||||
# php_exe_path = C:\Program Files\php\cli\php.exe
|
# php_exe_path = C:\Program Files\php\cli\php.exe
|
||||||
|
@@ -64,7 +64,7 @@
|
|||||||
|
|
||||||
<li>Individually configurable virtual host support.</li>
|
<li>Individually configurable virtual host support.</li>
|
||||||
|
|
||||||
<li>Line-based annotation/blame display (<em>CVS only</em>).</li>
|
<li>Line-based annotation/blame display.</li>
|
||||||
|
|
||||||
<li>Revision graph capabilities (via integration with <a
|
<li>Revision graph capabilities (via integration with <a
|
||||||
href="http://www.akhphd.au.dk/~bertho/cvsgraph/">CvsGraph</a>)
|
href="http://www.akhphd.au.dk/~bertho/cvsgraph/">CvsGraph</a>)
|
||||||
@@ -72,7 +72,8 @@
|
|||||||
|
|
||||||
<li>Syntax highlighting support (via integration with <a
|
<li>Syntax highlighting support (via integration with <a
|
||||||
href="http://www.codento.com/people/mtr/genscript/">GNU
|
href="http://www.codento.com/people/mtr/genscript/">GNU
|
||||||
enscript</a>).</li>
|
enscript</a> or
|
||||||
|
<a href="http://www.andre-simon.de/">Highlight</a>).</li>
|
||||||
|
|
||||||
<li><a href="http://www.mozilla.org/projects/bonsai/">Bonsai</a>-like
|
<li><a href="http://www.mozilla.org/projects/bonsai/">Bonsai</a>-like
|
||||||
repository query facilities.</li>
|
repository query facilities.</li>
|
||||||
|
@@ -57,28 +57,27 @@
|
|||||||
|
|
||||||
<p>This document describes some of the things that you will need to
|
<p>This document describes some of the things that you will need to
|
||||||
consider, change, or handle when upgrading an existing ViewVC
|
consider, change, or handle when upgrading an existing ViewVC
|
||||||
installation to a newer version.</p>
|
or ViewCVS installation to a newer version.</p>
|
||||||
|
|
||||||
<p>Upgrading from an ancient version of ViewVC to the latest version
|
<p>Upgrading from an ancient version to the latest version
|
||||||
isn't necessarily a multi step process. The instructions are only
|
isn't necessarily a multi step process. The instructions are only
|
||||||
organized that way. You can certainly upgrade in a single step.</p>
|
organized that way. You can certainly upgrade in a single step.</p>
|
||||||
|
|
||||||
<p>It is always recommended to install the new version in a fresh
|
<p>It is always recommended to install the new version in a fresh
|
||||||
directory and to carefully compare the configuration files. A
|
directory and to carefully compare the configuration files. A
|
||||||
possible approach is to name the directories
|
possible approach is to name the directories
|
||||||
<code>/usr/local/viewcvs-0.6</code>,
|
<code>/usr/local/viewvc-1.0</code>,
|
||||||
<code>/usr/local/viewcvs-0.7</code> and so on and than create a
|
<code>/usr/local/viewcvs-1.1</code> and so on and than create a
|
||||||
symbolic link <code>viewcvs</code> pointing to the production
|
symbolic link <code>viewvc</code> pointing to the production
|
||||||
version. This way you can easily test several versions and switch
|
version. This way you can easily test several versions and switch
|
||||||
back, if your users start to complain. </p>
|
back if your users start to complain.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section">
|
||||||
|
|
||||||
<h2 id="sec-from-0-9">Upgrading From 0.9</h2>
|
<h2 id="sec-from-0-9">Upgrading From ViewCVS 0.9</h2>
|
||||||
|
|
||||||
<p>This section discusses how to upgrade ViewCVS 0.9 to version 1.0 or
|
<p>This section discusses how to upgrade ViewCVS 0.9 to ViewVC 1.0.</p>
|
||||||
a later version of the software.</p>
|
|
||||||
|
|
||||||
<h3>CGI Stubs</h3>
|
<h3>CGI Stubs</h3>
|
||||||
|
|
||||||
@@ -161,7 +160,7 @@
|
|||||||
<h3>Templates</h3>
|
<h3>Templates</h3>
|
||||||
|
|
||||||
<p>The templates have changed drastically in this version of ViewVC.
|
<p>The templates have changed drastically in this version of ViewVC.
|
||||||
If you are using customized templates from 0.9 or earlier, you want
|
If you are using customized templates from 0.9 or earlier, you will want
|
||||||
to port your old customizations to the new template files instead of
|
to port your old customizations to the new template files instead of
|
||||||
trying to get the old template files to work with the new ViewVC.</p>
|
trying to get the old template files to work with the new ViewVC.</p>
|
||||||
|
|
||||||
@@ -982,7 +981,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section">
|
||||||
|
|
||||||
<h2 id="sec-from-0-8">Upgrading From 0.8</h2>
|
<h2 id="sec-from-0-8">Upgrading From ViewCVS 0.8</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
This section discusses how to upgrade ViewCVS 0.8 to version
|
This section discusses how to upgrade ViewCVS 0.8 to version
|
||||||
|
@@ -74,7 +74,7 @@ See the sections below for information on setting up optional features and
|
|||||||
troubleshooting. From here on <PYTHON_DIR> will stand for the Python root
|
troubleshooting. From here on <PYTHON_DIR> will stand for the Python root
|
||||||
directory (usually something like C:\Python22) and <VIEWVC_INSTALL_DIR> will
|
directory (usually something like C:\Python22) and <VIEWVC_INSTALL_DIR> will
|
||||||
represent the directory where ViewVC has been installed to (default is
|
represent the directory where ViewVC has been installed to (default is
|
||||||
C:\Program Files\viewvc-1.0-dev).
|
C:\Program Files\viewvc-VERSION).
|
||||||
|
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
SERVER CONFIGURATION
|
SERVER CONFIGURATION
|
||||||
|
@@ -18,6 +18,13 @@
|
|||||||
|
|
||||||
<h1>ViewVC — Web-based Version Control Repository Browsing</h1>
|
<h1>ViewVC — Web-based Version Control Repository Browsing</h1>
|
||||||
|
|
||||||
|
<div class="h2">
|
||||||
|
<h2>Latest Release</h2>
|
||||||
|
|
||||||
|
<p>The most recent release of ViewVC is: <strong>1.0.0-rc1</strong></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="h2">
|
<div class="h2">
|
||||||
<h2>What Is ViewVC?</h2>
|
<h2>What Is ViewVC?</h2>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user