How To Use Subversion For OpenWebMail Development

-You must have an account on the SVN server before you can commit changes. Send
 an email to the owm-devel mailing list to request an account.

-If you don't want an account, please submit patches with 'diff -uN oldfile newfile > patch'
 to openwebmail.AT.acatysmoof.com.

===============
GETTING STARTED
===============
CHECKOUT A COPY OF THE CURRENT CODE FROM 'trunk':
svn checkout http://openwebmail.acatysmoof.com/svn/trunk [OPTIONAL:/where/to/put/it]


================
EDITING THE CODE
================
ADDING, DELETING, COPYING, OR MOVING DIRECTORIES:

- do NOT use rm, mv, or cp on SVN data! Use the following commands:

svn add foo
-Schedule file, directory, or symbolic link foo to be added to the repository. When you next commit, foo will become a child of its parent directory. Note that if foo is a directory, everything underneath foo will be scheduled for addition. If you only want to add foo itself, pass the --non-recursive (-N) switch.

svn delete foo
-Schedule file, directory, or symbolic link foo to be deleted from the repository. If foo is a file or link, it is immediately deleted from your working copy. If foo is a directory, it is not deleted, but Subversion schedules it for deletion. When you commit your changes, foo will be removed from your working copy and the repository.

svn copy foo bar
-Create a new item bar as a duplicate of foo. bar is automatically scheduled for addition. When bar is added to the repository on the next commit, its copy history is recorded (as having originally come from foo). svn copy does not create intermediate directories.

svn move foo bar
-This command is exactly the same as running svn copy foo bar; svn delete foo. That is, bar is scheduled for addition as a copy of foo, and foo is scheduled for removal. svn move does not create intermediate directories.

Otherwise, just edit the code as normal using your favorite text editor.


============================
COMMITTING YOUR CHANGES BACK
============================

CHECK YOUR CHANGES BEFORE YOU COMMIT THEM USING "svn status" FROM THE TOP OF THE TRUNK!!
UPDATE YOUR COPY TO THE LATEST BEFORE COMMITTING TO MAKE SURE IT WILL STILL WORK (svn update)

(make sure you 'svn add' any new files you made!):

'svn status' outputs:
A item
    The file, directory, or symbolic link item has been scheduled for addition into the repository.

C item
    The file item is in a state of conflict. That is, changes received from the server during an update overlap with local changes that you have in your working copy. You must resolve this conflict before committing your changes to the repository.

D item
    The file, directory, or symbolic link item has been scheduled for deletion from the repository.

M item
    The contents of the file item have been modified.

R item
    The file, directory, or symbolic link item has been scheduled to replace item in the repository. This means that the object is first deleted, then another object of the same name is added, all within a single revision.

X item
    The directory item is unversioned, but is related to a Subversion externals definition. To find out more about externals definitions, see the section called ?Externals Definitions?.

? item
    The file, directory, or symbolic link item is not under version control. You can silence the question marks by either passing the --quiet (-q) switch to svn status, or by setting the svn:ignore property on the parent directory. For more information on ignored files, see the section called ?svn:ignore?.

! item
    The file, directory, or symbolic link item is under version control but is missing or somehow incomplete. The item can be missing if it's removed using a non-Subversion command. In the case of a directory, it can be incomplete if you happened to interrupt a checkout or update. A quick svn update will refetch the file or directory from the repository, or svn revert file will restore a missing file.

~ item
    The file, directory, or symbolic link item is in the repository as one kind of object, but what's actually in your working copy is some other kind. For example, Subversion might have a file in the repository, but you removed the file and created a directory in its place, without using the svn delete or svn add command.

I item
    The file, directory, or symbolic link item is not under version control, and Subversion is configured to ignore it during svn add, svn import and svn status operations. For more information on ignored files, see the section called ?svn:ignore?. Note that this symbol only shows up if you pass the --no-ignore option to svn status?otherwise the file would be ignored and not listed at all!


COMMIT YOUR CHANGES (follow the changelog format already established!):
svn commit
The first time you commit you will be asked for your developer name and password. It will be stored in your tree.

**************************************************************************
UPDATE YOUR LOCAL WORKING COPY AFTER YOU COMMIT SO THAT YOU STAY IN SYNC!
**************************************************************************
svn update
Or else you will have problems on future commits.
For each updated item a line will start with a character reporting
the action taken. These characters have the following meaning:

A Added
D Deleted
U Updated
C Conflict
G Merged


===============
TROUBLESHOOTING
===============
YOU MADE A MISTAKE AND WANT TO REVERT THE FILE BACK TO HOW IT WAS BEFORE:
svn revert foo_file

YOU MADE A MISTAKE AND WANT TO REVERT A WHOLE DIRECTORY BACK TO HOW IT WAS BEFORE:
svn revert --recursive foo_dir

YOU MADE A BAD COMMIT AND WANT TO GO BACK TO THE PREVIOUS REVISION:
(THIS WILL UNDO -ALL- CHANGES FROM THE LAST COMMIT!)

$ svn update
(now your working copy is at HEAD)

$ svn merge -r BASE:PREV URL-to-repository


=============================
MISCELLANEOUS USEFUL COMMANDS
=============================
CHANGE DATE ON REVISION:
svn propset -rXXX --revprop svn:date "2002-02-10T03:00:00.000000Z" http://openwebmail.acatysmoof.com/svn
-A new revision date MUST be older than the revision before it

CHANGE THE LOG FOR A REVISION (in case you made a typo in your commit message):
svn propset -rXXX --revprop svn:log -F NEWLOGFILE http://openwebmail.acatysmoof.com/svn

MAKE A TAG OF THE TRUNK (Lead Developer only please):
svn copy http://openwebmail.acatysmoof.com/svn/trunk http://openwebmail.acatysmoof.com/svn/tags/1.13

REVIEW PROPERTIES OF A REVISION:
svn proplist -v --revprop -rXXX http://openwebmail.acatysmoof.com/svn

AUTO-BUILD A CHANGELOG:
svn log -r1:HEAD http://openwebmail.acatysmoof.com/svn > changes
-add the -v option to see changes with a list of changed files per revision
-HEAD refers to the last revision number that was checked in the repository.

PACKAGING A RELEASE:
svn export http://openwebmail.acatysmoof.com/svn/tags/1.12 openwebmail-1.12
tar -cvzf openwebmail-1.12.tar.gz openwebmail-1.12

EXAMINE LOCAL CHANGES AGAINST THE REVISION YOU CHECKED OUT:
svn diff

COMPARE YOUR WORKING COPY TO THE LATEST REVISION IN THE REPOSITORY:
svn diff -r HEAD .

COMPARE REPOSITORY TO REPOSITORY:
svn diff -r 32:36


=========
MORE HELP
=========
more info: http://svnbook.red-bean.com





