By: Privoxy Developers
-$Id: developer-manual.sgml,v 1.28 2002/04/08 22:59:26 hal9 Exp $
+$Id: developer-manual.sgml,v 1.31 2002/04/11 09:32:52 oes Exp $
The developer manual gives the users information on how to help the developer
team. It provides guidance on coding, testing, documentation and other issues.
5.7.8. The Programmer Who Uses 'malloc' is Responsible for Ensuring
'free'
5.7.9. Add loaders to the `file_list' structure and in order
- 5.7.10. "Uncertain" new code and/or changes to exitinst code, use FIXME
+ 5.7.10. "Uncertain" new code and/or changes to existing code, use FIXME
5.8. Addendum: Template for files and function comment blocks:
For the time being (read, this section is under construction), please note the
following guidelines for changing stuff in the code. If it is
- 1. A bugfix / clean-up / cosmetic thing: shoot
+ 1. A bug-fix / clean-up / cosmetic thing: shoot
2. A new feature that can be turned off: shoot
4. Documentation Guidelines
-All formal documents are maintained in docbook SGML and located in the doc/
+All formal documents are maintained in Docbook SGML and located in the doc/
source/* directory. You will need Docbook, the Docbook DTD's and the Docbook
modular stylesheets (or comparable alternatives), and either jade or openjade
(recommended) installed in order to build docs from source. Currently there is
involved in the documentation (at present Stefan and Hal).
Other, less formal documents (e.g. LICENSE, INSTALL) are maintained as plain
-text files in the toplevel source directory. At least for the time being.
+text files in the top-level source directory. At least for the time being.
Packagers are encouraged to include this documentation. For those without the
ability to build the docs locally, text versions of each are kept in CVS. HTML
2. Run make webserver which copies all files from doc/webserver to the
sourceforge webserver via scp.
+Finished docs should be occasionally submitted to CVS (doc/webserver/*/*.html)
+so that those without the ability to build them locally, have access to them if
+needed. This is especially important just prior to a new release! Please do
+this after the $VERSION and other release specific data in configure.in has
+been updated (this is done just prior to a new release).
+
-------------------------------------------------------------------------------
4.1. Quickstart to Docbook and SGML
Some common elements that you likely will use:
-, paragraph delimiter. Most text needs to be within paragraph elements (there
-are some exceptions).
-, the stylesheets make this italics.
-, files and directories.
-, command examples.
-, like
-, more or less.
-, list with bullets.
-, member of the above.
-, screen output, implies .
-, like HTML tag.
-, for, doh, quoting text.
+<para></para>, paragraph delimiter. Most text needs to be within paragraph
+elements (there are some exceptions).
+<emphasis></emphasis>, the stylesheets make this italics.
+<filename></filename>, files and directories.
+<command></command>, command examples.
+<literallayout></literallayout>, like <pre>, more or less.
+<itemizedlist></itemizedlist>, list with bullets.
+<listitem></listitem>, member of the above.
+<screen></screen>, screen output, implies <literallayout>.
+<ulink url="example.com"></ulink>, like HTML <a> tag.
+<quote></quote>, for, doh, quoting text.
Look at any of the existing docs for examples of all these and more.
v4.x <comment> is replaced by <remark>.)
* We have an international audience. Refrain from slang, or English
- idiosyncrasies (too many to list :).
+ idiosyncrasies (too many to list :). Humor also does not translate well
+ sometimes.
* Try to keep overall line lengths in source files to 80 characters or less
- for obvious reasons. This is not always possible, with lenghty URLs for
+ for obvious reasons. This is not always possible, with lengthy URLs for
instance.
* Our documents are available in differing formats. Right now, they are just
re-setting with each release (done by the Makefile). A sampling of custom
entities are listed below. See any of the main docs for examples.
- * Re-cyclable "boilerplate" text entities are defined like:
+ * Re- "boilerplate" text entities are defined like:
<!entity supported SYSTEM "supported.sgml">
* Commonly used "internal entities":
- p-version: the Privoxy version string, e.g. "2.9.13".
- p-status: the project status, either "ALPHA", "BETA", or "STABLE".
+ p-version: the Privoxy version string, e.g. "2.9.14".
+ p-status: the project status, either "alpha", "beta", or "stable".
p-not-stable: use to conditionally include text in "not stable" releases
- (e.g. "BETA").
+ (e.g. "beta").
p-stable: just the opposite.
p-text: this doc is only generated as text.
Exception:
-If you are trying to add a small logic comment and do not wish to "disrubt" the
+If you are trying to add a small logic comment and do not wish to "disrupt" the
flow of the code, feel free to use a 1 line comment which is NOT on the same
line as the code.
Explanation:
-Use all lowercase, and seperate words via an underscore ('_'). Do not start an
+Use all lowercase, and separate words via an underscore ('_'). Do not start an
identifier with an underscore. (ANSI C reserves these for use by the compiler
and system headers.) Do not use identifiers which are reserved in ANSI C++.
(E.g. template, class, true, false, ...). This is in case we ever decide to
Explanation:
-Use all lowercase, and seperate words via an underscore ('_'). Do not start an
+Use all lowercase, and separate words via an underscore ('_'). Do not start an
identifier with an underscore. (ANSI C reserves these for use by the compiler
and system headers.) Do not use identifiers which are reserved in ANSI C++.
(E.g. template, class, true, false, ...). This is in case we ever decide to
if ( this == that ) { ... }
Note: In the special case that the if-statement is inside a loop, and it is
-trivial, i.e. it tests for a condidtion that is obvious from the purpose of the
+trivial, i.e. it tests for a condition that is obvious from the purpose of the
block, one-liners as above may optically preserve the loop structure and make
it easier to read.
-Status: developer-discrection.
+Status: developer-discretion.
Example exception:
if ( condition ) { structure->flag = 1; } else { structure->flag = 0; }
-Note: The former is readable and consice. The later is wordy and inefficient.
+Note: The former is readable and concise. The later is wordy and inefficient.
Please assume that any developer new to the project has at least a "good"
knowledge of C/C++. (Hope I do not offend by that last comment ... 8-)
int function1( ... ) { ...code... return( retCode ); } int function2( ... ) { }
-Note: Use 1 blank line before the closing brace and 2 lines afterwards. This
+Note: Use 1 blank line before the closing brace and 2 lines afterward. This
makes the end of function standout to the most casual viewer. Although function
-comments help seperate functions, this is still a good coding practice. In
+comments help separate functions, this is still a good coding practice. In
fact, I follow these rules when using blocks in "for", "while", "do" loops, and
long if {} statements too. After all whitespace is free!
-Status: developer-discrection on the number of blank lines. Enforced is the end
+Status: developer-discretion on the number of blank lines. Enforced is the end
of function comments.
-------------------------------------------------------------------------------
to access memory address 00000000 and not 129FA012; or arrayPtr[20] causes a
SIGSEV vs. arrayPtr[0].
-Status: developer-discrection if and only if the variable is assigned a value
+Status: developer-discretion if and only if the variable is assigned a value
"shortly after" declaration.
-------------------------------------------------------------------------------
Example:
-#include /* This is not a local include */
+#include <iostream.h> /* This is not a local include */
#include "config.h" /* This IS a local include */
Exception:
/* This is not a local include, but requires a path element. */
-#include
+#include <sys/fileName.h>
Note: Please! do not add "-I." to the Makefile without a _very_ good reason.
-This duplicates the #include "file.h" behaviour.
+This duplicates the #include "file.h" behavior.
-------------------------------------------------------------------------------
Note: If you declare "file_list xyz;" (without the pointer), then including the
proper header file is necessary. If you only want to prototype a pointer,
-however, the header file is unneccessary.
+however, the header file is unnecessary.
-Status: Use with discrection.
+Status: Use with discretion.
-------------------------------------------------------------------------------
default :
log_error( ... );
- ... anomly code goes here ...
+ ... anomaly code goes here ...
continue; / break; / exit( 1 ); / etc ...
} /* end switch( hash_string( cmd ) ) */
switch statement. This API call *should* be included in a default statement.
Another Note: This is not so much a readability issue as a robust programming
-issue. The "anomly code goes here" may be no more than a print to the STDERR
+issue. The "anomaly code goes here" may be no more than a print to the STDERR
stream (as in load_config). Or it may really be an ABEND condition.
Status: Programmer discretion is advised.
variables; feel free to declare them on 1 line. You should, although, provide a
good comment on their functions.
-Status: developer-discrection.
+Status: developer-discretion.
-------------------------------------------------------------------------------
Explanation:
-Create a local stuct (on the stack) if the variable will live and die within
+Create a local struct (on the stack) if the variable will live and die within
the context of one function call.
Only "malloc" a struct (on the heap) if the variable's life will extend beyond
Example:
If a function creates a struct and stores a pointer to it in a
-list, then it should definately be allocated via `malloc'.
+list, then it should definitely be allocated via `malloc'.
-------------------------------------------------------------------------------
programmer's code. You are also responsible for ensuring that deletion is
timely (i.e. not too soon, not too late). This is known as "low-coupling" and
is a "good thing (tm)". You may need to offer a free/unload/destuctor type
-function to accomodate this.
+function to accommodate this.
Example:
The developer cannot be expected to provide `free'ing functions for C run-time
library functions ... such as `strdup'.
-Status: developer-discrection. The "main" use of this standard is for
-allocating and freeing data structures (complex or nested).
+Status: developer-discretion. The "main" use of this standard is for allocating
+and freeing data structures (complex or nested).
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-5.7.10. "Uncertain" new code and/or changes to exitinst code, use FIXME
+5.7.10. "Uncertain" new code and/or changes to existing code, use FIXME
Explanation:
If you have enough confidence in new code or confidence in your changes, but
-are not *quite* sure of the reprocussions, add this:
+are not *quite* sure of the repercussions, add this:
-/* FIXME: this code has a logic error on platform XYZ, * attempthing to fix */
-#ifdef PLATFORM ...changed code here... #endif
+/* FIXME: this code has a logic error on platform XYZ, * attempting to fix */ #
+ifdef PLATFORM ...changed code here... #endif
or:
/* FIXME: new code that *may* break something else... */ ...new code here...
Note: If you make it clear that this may or may not be a "good thing (tm)", it
-will be easier to identify and include in the project (or conversly exclude
+will be easier to identify and include in the project (or conversely exclude
from the project).
-------------------------------------------------------------------------------
Example for file comments:
-const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 1.28 2002/04/08 22:59:26 hal9 Exp $";
-/*********************************************************************
- *
- * File : $Source$
- *
- * Purpose : (Fill me in with a good description!)
- *
- * Copyright : Written by and Copyright (C) 2001 the SourceForge
- * Privoxy team. http://www.privoxy.org/
- *
- * Based on the Internet Junkbuster originally written
- * by and Copyright (C) 1997 Anonymous Coders and
- * Junkbusters Corporation. http://www.junkbusters.com
- *
- * This program is free software; you can redistribute it
- * and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will
- * be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public
- * License for more details.
- *
- * The GNU General Public License should be included with
- * this file. If not, you can view it at
- * http://www.gnu.org/copyleft/gpl.html
- * or write to the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Revisions :
- * $Log$
- *
- *********************************************************************/
-
-
-#include "config.h"
-
- ...necessary include files for us to do our work...
-
-const char FILENAME_h_rcs[] = FILENAME_H_VERSION;
+const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 1.31 2002/04/11 09:32:52 oes Exp $";
+/*********************************************************************
+ *
+ * File : $Source$
+ *
+ * Purpose : (Fill me in with a good description!)
+ *
+ * Copyright : Written by and Copyright (C) 2001 the SourceForge
+ * Privoxy team. http://www.privoxy.org/
+ *
+ * Based on the Internet Junkbuster originally written
+ * by and Copyright (C) 1997 Anonymous Coders and
+ * Junkbusters Corporation. http://www.junkbusters.com
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will
+ * be useful, but WITHOUT ANY WARRANTY; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public
+ * License for more details.
+ *
+ * The GNU General Public License should be included with
+ * this file. If not, you can view it at
+ * http://www.gnu.org/copyleft/gpl.html
+ * or write to the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revisions :
+ * $Log$
+ *
+ *********************************************************************/
+
+
+#include "config.h"
+
+ ...necessary include files for us to do our work...
+
+const char FILENAME_h_rcs[] = FILENAME_H_VERSION;
Note: This declares the rcs variables that should be added to the
"show-proxy-args" page. If this is a brand new creation by you, you are free to
change the "Copyright" section to represent the rights you wish to maintain.
Note: The formfeed character that is present right after the comment flower box
-is handy for (X|GNU)Emacs users to skip the verbige and get to the heart of the
-code (via `forward-page' and `backward-page'). Please include it if you can.
+is handy for (X|GNU)Emacs users to skip the verbiage and get to the heart of
+the code (via `forward-page' and `backward-page'). Please include it if you
+can.
Example for file header comments:
-#ifndef _FILENAME_H
-#define _FILENAME_H
-#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 1.28 2002/04/08 22:59:26 hal9 Exp $"
-/*********************************************************************
- *
- * File : $Source$
- *
- * Purpose : (Fill me in with a good description!)
- *
- * Copyright : Written by and Copyright (C) 2001 the SourceForge
- * Privoxy team. http://www.privoxy.org/
- *
- * Based on the Internet Junkbuster originally written
- * by and Copyright (C) 1997 Anonymous Coders and
- * Junkbusters Corporation. http://www.junkbusters.com
- *
- * This program is free software; you can redistribute it
- * and/or modify it under the terms of the GNU General
- * Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will
- * be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU General Public
- * License for more details.
- *
- * The GNU General Public License should be included with
- * this file. If not, you can view it at
- * http://www.gnu.org/copyleft/gpl.html
- * or write to the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Revisions :
- * $Log$
- *
- *********************************************************************/
-
-
-#include "project.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- ... function headers here ...
-
-
-/* Revision control strings from this header and associated .c file */
-extern const char FILENAME_rcs[];
-extern const char FILENAME_h_rcs[];
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* ndef _FILENAME_H */
-
-/*
- Local Variables:
- tab-width: 3
- end:
-*/
+#ifndef _FILENAME_H
+#define _FILENAME_H
+#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 1.31 2002/04/11 09:32:52 oes Exp $"
+/*********************************************************************
+ *
+ * File : $Source$
+ *
+ * Purpose : (Fill me in with a good description!)
+ *
+ * Copyright : Written by and Copyright (C) 2001 the SourceForge
+ * Privoxy team. http://www.privoxy.org/
+ *
+ * Based on the Internet Junkbuster originally written
+ * by and Copyright (C) 1997 Anonymous Coders and
+ * Junkbusters Corporation. http://www.junkbusters.com
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will
+ * be useful, but WITHOUT ANY WARRANTY; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public
+ * License for more details.
+ *
+ * The GNU General Public License should be included with
+ * this file. If not, you can view it at
+ * http://www.gnu.org/copyleft/gpl.html
+ * or write to the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revisions :
+ * $Log$
+ *
+ *********************************************************************/
+
+
+#include "project.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ ... function headers here ...
+
+
+/* Revision control strings from this header and associated .c file */
+extern const char FILENAME_rcs[];
+extern const char FILENAME_h_rcs[];
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* ndef _FILENAME_H */
+
+/*
+ Local Variables:
+ tab-width: 3
+ end:
+*/
Example for function comments:
8. Releasing a new version
-To minimize trouble with distribution contents, webpage errors and the like, we
-strongly encourage you to follow this section if you prepare a new release of
-code or new pages on the webserver.
+To minimize trouble with distribution contents, web-page errors and the like,
+we strongly encourage you to follow this section if you prepare a new release
+of code or new pages on the webserver.
The following programs are required to follow this process: ncftpput (ncftp),
scp (ssh), gmake (GNU's version of make), autoconf, cvs, ???.
+Replace X, Y and Z with the actual version number (X = major, Y = minor, Z =
+point):
+
-------------------------------------------------------------------------------
8.1. Before the Release
-The following must be done by one of the developers prior to each new release:
+The following must be done by one of the developers prior to each new release.
* Make sure that everybody who has worked on the code in the last couple of
days has had a chance to yell "no!" in case they have pending changes/fixes
in their pipelines.
- * Increment the version number in configure.in in CVS. Also, the RPM release
- number in configure.in. Do NOT touch version information after export from
- CVS. All packages will use the version and release data from configure.in.
- Local files should not be changed, except prior to a CVS commit!!! This way
- we are all on the same page!
+ * Increment the version number in configure.in in CVS. Also, increase or
+ reset the RPM release number in configure.in as appropriate. Do NOT touch
+ version information after export from CVS. All packages will use the
+ version and release data from configure.in. Local files should not be
+ changed, except prior to a CVS commit!!! This way we are all on the same
+ page!
* If the default actionsfile has changed since last release, bump up its
version info in this line:
Then change the version info in doc/webserver/actions/index.php, line:
'$required_actions_file_version = "A.B";'
- * Tag all files in CVS with the version number with "cvs tag v_X_Y_Z" (where
- X = major, Y = minor, Z = point). Don't use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z
- (won't work) etc.
+ * Commit all files that were changed in the above steps!
+
+ * Tag all files in CVS with the version number with "cvs tag v_X_Y_Z". Don't
+ use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z (won't work) etc.
- * The first package uploaded should be the official "tarball" release. This
- is built with the "make tarball-dist" Makefile target, and then can be
- uploaded with "make tarball-upload" (see below).
+ * The first package uploaded should be the official "tarball" release, as
+ required by the GPL. This is built with the "make tarball-dist" Makefile
+ target, and then can be uploaded with "make tarball-upload" (see below).
-------------------------------------------------------------------------------
8.2. Update the webserver
All files must be group-readable and group-writable (or no one else will be
-able to change them). To update the webserver, create any pages locally in the
-doc/webserver directory (or create new directories under doc/webserver), then
+able to change them)! To update the webserver, create any pages locally in the
+doc/webserver/* directory (or create new directories under doc/webserver), then
do
make webserver
+This will do the upload to the webserver (www.privoxy.org).
+
Note that "make dok" (or "make redhat-dok") creates doc/webserver/user-manual,
-doc/webserver/developer-manual, doc/webserver/faq and doc/webserver/man-page
-automatically.
+doc/webserver/developer-manual, doc/webserver/faq and doc/webserver/index.html
+automatically. (doc/webserver/man-page/privoxy-man-page.html is created by a
+separate Makefile target, "make man", due to dependencies on some obscure perl
+scripts. See comments in GNUmakefile.)
+
+Someone should also commit these to CVS so that packagers without the ability
+to build docs locally, have access to them. This is a separate step, and should
+also be done before each official release.
Please do NOT use any other means of transferring files to the webserver. "make
webserver" not only uploads, but will make sure that the appropriate
Ensure that you have the latest code version. Hence run:
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
+ cd current
first.
To upload the package to Sourceforge, simply issue
- make suse-upload or make redhat-upload
+ make suse-upload (or make redhat-upload)
Go to the displayed URL and release the file publicly on Sourceforge.
Ensure that you have the latest code version. Hence run:
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
cd ..
Choose the right operating system (not the Debian one). If you have downloaded
Privoxy before,
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
+ cd current
If not, please checkout Privoxy via CVS first. Run:
Ensure that you have the latest code version. Hence run
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
+ cd current
Run:
Ensure that you have the latest code version. Hence run:
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
+ cd current
first. Run:
Ensure that you have the latest code version. Hence run:
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
cd ..
ssh cf.sourceforge.net
-Choose the right operating system. If you have downloaded Privoxy before,
+Choose the right operating system.
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
+ cd current
-If not, please checkout Privoxy via CVS first. Run:
+Run:
autoheader && autoconf && ./configure
8.10. Tarball
-Ensure that you have the latest code version. Hence run:
+Ensure that you have the right code version. Hence run:
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
+ cd current
first. Run:
- make clobber
autoheader && autoconf && ./configure
Ensure that you have the latest code version. Hence run:
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
+ cd current
first. Run:
Ensure that you have the latest code version. Hence run:
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
+ cd current
first. Run:
Choose the right operating system. If you have downloaded Privoxy before:
- cd current
cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
+ cd current
If not, please checkout Privoxy via CVS first. Run: