Since Bryan has
documented his development environment, I thought I would also share how I have things set up. I keep my various development machines in sync using the rsync command. I have a server that I use for central storage, and each dev machine copies my source to and from this machine. The great thing about rsync is that it only ships around the files that have changed, and so each copy operation is usually quite fast. I have two scripts installed on each dev machine which invoke rsync (tunneled through ssh):
"upload" script:
#!/bin/sh
rsync $* -avz -e ssh --delete ~morgen/dev/trees hostname.of.my.server:storage_directory/
"download" script:
#!/bin/sh
rsync $* -avz -e ssh --delete hostname.of.my.server:storage_directory/trees ~morgen/dev/
The contents of ~/dev/trees will get copied to or from the server's storage_directory/trees directory. Make sure that storage_directory exists before running upload for the first time. Also note that the --delete option to rsync will
remove files from the destination that no longer appear in the source.
In my ~/dev/ directory I keep the following directories:
- archives/
- binaries/
- trees/
~/dev/trees contains my various checked out copies of chandler python source: dot5 branch, trunk where I do most of my development, and vanilla which is a copy where I don't make local mods.
I have CHANDLERBIN set to ~/dev/binaries, and I have CHANDLERARCHIVES set to ~/dev/archives. Also, I am now setting CHANDLERHOME to ~/dev/trees/trunk since hardhat sets it incorrectly (it assumes your directory is named 'chandler').
Typical use for my upload/download scripts is as follows: I have been making changes on a machine in my office, but now I want to do some work on my laptop in the other room; on the office machine I run 'upload', go over to my laptop and run 'download' and start working on the laptop. When I'm done on the laptop I 'upload' then go to whatever other machine I want and 'download'.
Logging Config file example:
[loggers]
keys=root,sharing,repository,inbound,parcel,feeds,utility,photos,ae,icalendar,collections,dialogs,webserver
[handlers]
keys=chandler_log
[formatters]
keys=form01
[logger_root]
level=WARNING
handlers=chandler_log
[logger_sharing]
level=INFO
propagate=0
handlers=chandler_log
qualname=osaf.sharing
[logger_icalendar]
level=INFO
propagate=0
handlers=chandler_log
qualname=osaf.sharing.ICalendar
[logger_parcel]
level=INFO
propagate=0
handlers=chandler_log
qualname=application.Parcel
[logger_inbound]
level=INFO
propagate=0
handlers=chandler_log
qualname=inbound
[logger_repository]
level=INFO
propagate=0
handlers=chandler_log
qualname=repository
[logger_feeds]
level=DEBUG
propagate=0
handlers=chandler_log
qualname=feeds
[logger_photos]
level=INFO
propagate=0
handlers=chandler_log
qualname=photos
[logger_utility]
level=INFO
propagate=0
handlers=chandler_log
qualname=application.Utility
[logger_collections]
level=INFO
propagate=0
handlers=chandler_log
qualname=osaf.pim.collections
[logger_webserver]
level=INFO
propagate=0
handlers=chandler_log
qualname=osaf.webserver
[logger_dialogs]
level=INFO
propagate=0
handlers=chandler_log
qualname=application.dialogs
[logger_ae]
level=INFO
propagate=0
handlers=chandler_log
qualname=osaf.framework.attributeEditors
[handler_chandler_log]
class=FileHandler
level=NOTSET
formatter=form01
args=(os.path.join(PROFILEDIR,'chandler.log'), 'a')
[formatter_form01]
format=%(asctime)s %(name)s %(levelname)s: %(message)s
datefmt=