Replies inline below.
On Sun, 16 Mar 2003, Robert Collins wrote:
Igor, what do you think of the attached patch.
It's a halfway house between your embedded ordering and the package ordering I'm proposing.
This patch changes setups behaviour on only one way: package included post-install scripts will run before hand placed scripts. (i.e. Pierre's security testing script).
It doesn't (yet) add dependencies to the the script ordering, but that is truely trivial given an ordered iterator for the package db.
Will I be causing grief for you by applying this patch?
Not really, but let's bring your patch and mine closer, so that you could reuse the good parts of mine (and I could avoid duplicating code). See below.
The install.cc changes I plan to apply regardless, modulo the 'Note script files as they are installed' 2-liner.
Why not create a proper Installer class? Move all static variables (e.g., rebootneeded, package_bytes, etc) into the class? Make initDialog() a constructor? Make replaceOnReboot{Succeeded|Failed}() private?
As for the "Note script files" bit, you could add that too, it won't hurt.
If this goes in, then I can easily throw a package-ordered iterator at postinstall and solve the root problem.
True. How about merging some functionality from my FileDesc class and your Script class (at least the == operator)? That way, FileDesc can simply inherit from Script, add the dependences and the "<" operator, and that's it...
Also, it might be nice to have a proper Script class... Can you, for example, rename run_script() into Script::run()? And add a method extracting the extension into the class? BTW, do you have to have a vector of Script objects (as opposed to Script pointers)?
BTW: What was the test case that prompted a need for ordered postinstall scripts? Rob
I'm not sure right now, but I think running passwd-grp.sh before attempting to execute any programs in /bin was one of them...
BTW, one other idea I had was a FilterVisitor class that would act as a
wrapper for some other Visitor and only call "visit" for files that don't
match a pattern... I thought of using it to filter out "*.done". It's
pretty orthogonal to the rest of my changes, though...
Igor2003-03-15 Robert Collins <[EMAIL PROTECTED]>
* install.cc: Introduce Installer class. (init_dialog): Rename to Installer::initDialog. (progress): Rename to Installer::progress. (standard_dirs): Rename to Installer::StandardDirs. (uninstall_one): Rename to Installer::uninstallOne. (replace_one): Rename to Installer::replaceOne. (log_ror_failure): Rename to Installer::replaceOnRebootFailed. (log_ror_success): Rename to Installer::replaceOnRebootSucceeded. (install_one_source): Rename to Installer::installOneSource. Note script files as they are installed. * package_version.cc (packageversion::addScript): Implement. (packageversion::scripts): Implement. * package_version.h (packageversion::addScript): Record the presence of a script. * script.h (Script): New class to track scripts. * postinstall.cc (do_postinstall): Iterate through the package listed scripts before searching for scripts. * String++.cc (String::substr): Second argument needed to be signed. * String++.h (String::substr): Second argument needed to be signed.
-- http://cs.nyu.edu/~pechtcha/ |\ _,,,---,,_ [EMAIL PROTECTED] ZZZzz /,`.-'`' -. ;-;;,_ [EMAIL PROTECTED] |,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski '---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow!
Oh, boy, virtual memory! Now I'm gonna make myself a really *big* RAMdisk! -- /usr/games/fortune
