[csw-devel] psuedo sketch of web and mantis automation
Ben Walton
bwalton at opencsw.org
Fri Aug 19 03:40:32 CEST 2011
Hi All,
I've not started coding this yet as I'm still getting the environment
setup, but here is the rough outline (pseudo code) of the overall flow
for this. A few things of note:
Must of the mantis stuff relies on info from the web database thus
'add' operations should be web then mantis while 'delete' operations
should be mantis then web.
I'm envisioning a code pattern that allows for listener plugins. A
general call to remove_pkgs(pkgset) would be called. That would then
iterate over the listeners that are plugged in calling their remove
methods. I'll register a mantis listener and a web db listener.
Listeners will have priorities to facilitate ordering although I'm not
sure the best way (yet) to handle this.
This design should allow swapping out mantis code for $new_bugtracker
later without too much work.
Detecting renames is important in the _stub case. I'll likely need to
catch it in the general case too. Things would have been _much_
simpler if the package name instead of the software name was set as
the key for everything...
Anyway, pseudo code. Any obvious issues?
oldcat = load_old_catalog()
newcat = fetch_new_catalog()
[new, update, remove] = new_compared_to_old(oldcat, newcat)
stubs = find_stubs(new, update)
renames = []
for p in stubs
# determine based on package name what the old software name was
# (this does not rely on stub naming convention of $oldname ->
# $oldname + '_stub') as we'll actually look it up
stub_oldname = lookup_softname_by_pkgname(p)
# scan all packages about to be dropped
for q in remove
# if a dropped package software name is the stub's old name,
# handle a renaming case.
if q.softname = stub_oldname
# save the rename pair
renames << [p, q]
# no longer treat this package as a pure removal
remove = remove - q
# no longer treat the stub as a pure add or update
new = new - p
update = update -p
for [p,q] in renames
rename_pkg_in_mantis(p, q)
rename_pkg_in_webdb(p, q)
for p in remove
remove_pkg_from_mantis(p)
remove_pkg_from_webdb(p)
for p in new
add_pkg_to_webdb(p)
add_pkg_to_mantis(p)
for p in update
update_pkg_in_mantis(p)
update_pkg_in_webdb(p)
function rename_pkg_in_webdb(p, q)
# rough sql idea
update packages set pkgname = p.pkgname, maintainer =
p.maintainer, ... where q.softname = packages.softname
function rename_pkg_in_mantis(p, q)
# rough sql idea
update mantis_project_table ...
function delete_pkg_in_webdb(p)
delete from packages()
delete from dependencies () ...
delete from dependlibs () ...
delete from pathnames () ...
delete from uniquepaths () ...
function delete_pkg_in_mantis(p)
delete from mantis_project_user_table () ...
delete from mantis_project_table () ...
function add_pkg_to_webdb(p)
insert into packages ()...
insert into dependencies () ...
insert into dependlibs () ...
insert into pathnames () ...
insert into uniquepaths () ...
function add_pkg_to_mantis(p)
insert into mantis_project_table ()...
insert into mantis_project_user_table () ...
function update_pkg_in_webdb(p)
delete_pkg_in_webdb(p)
add_pkg_to_webdb(p)
function update_pkg_in_mantis()
update mantis_project_user_table () ...
Thanks
-Ben
--
Ben Walton
Systems Programmer - CHASS
University of Toronto
C:416.407.5610 | W:416.978.4302
More information about the devel
mailing list