[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