[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-dev] quarks install actions



While checkout is automatic, installation requires the name of the Quark to be installed, right?

Perhaps there should be more information given about who added the Quark to the repository.

RJK


On Dec 19, 2006, at 12:38 PM, Dan Stowell wrote:

This is something that concerns me about quarks overall - automated
installation should be done very carefully, ideally only with user
confirmation of each module that's installed.

Quarks don't seem to require any user confirmation for installation,
as far as I can tell. Of course, the command must be executed, but
that isn't necessarily always done directly by pressing Enter. I'd be
much more comfortable if there was a dialog-box confirmation or
something like that.

What's to stop a quark removing all user data via String.unixCmd or File.delete?

Dan


2006/12/19, Till Bovermann <tboverma@xxxxxxxxxxxxxxxxxxxxxxxx>:
Ok, I see.
I'm against it.
It would be easy to build a virus removing at least all user data
with this, just by writing a quarks file and adding it to the
repository.

2c
Till


On 19 Dec 2006, at 16:46, stefan kersten wrote:

> Till Bovermann wrote:
>> What do you wanna build/cleanup when installing quarks?
>
> ugens, scum, anything. i've attached a changeset that gives an idea of
> what i mean.
>
> <sk>
> Index: build/SCClassLibrary/Platform/Platform.sc
> ===================================================================
> --- build/SCClassLibrary/Platform/Platform.sc (revision 5713)
> +++ build/SCClassLibrary/Platform/Platform.sc (working copy)
> @@ -1,16 +1,56 @@
>  Platform
>  {
> +     var features;
> +
> +     *new {
> +             ^super.new.initPlatform
> +     }
> +     initPlatform {
> +             features = IdentityDictionary.new;
> +     }
> +
>       name { ^this.subclassResponsibility }
>
> +     // directories
>       systemAppSupportDir { _Platform_systemAppSupportDir }
>       userAppSupportDir { _Platform_userAppSupportDir }
>       systemExtensionDir { _Platform_systemExtensionDir }
>       userExtensionDir { _Platform_userExtensionDir }
> +     platformDir { ^this.name.asString }
>       pathSeparator { ^this.subclassResponsibility }
>
> +     // startup/shutdown hooks
>       startup { }
>       shutdown { }
>
> +     // features
> +     declareFeature { | aFeature |
> +             if (aFeature.asString.first == $_) {
> + Error("cannot declare primitive features").throw;
> +             };
> +             features.put(aFeature, true);
> +     }
> +     hasFeature { | aFeature |
> +             var isPrimitive;
> +             ^features.at(aFeature) ?? {
> + isPrimitive = (aFeature.asString.first == $_) and: {
> +                             try {
> + Object.allSubclasses.do { | class| > + class.methods.do { |method| > + if (method.primitiveName === aFeature) { > + throw(true);
> +                                                     }
> +                                             }
> +                                     };
> +                                     false
> +                             }
> +                     };
> +                     features.put(aFeature, isPrimitive);
> +                     isPrimitive
> +             }
> +     }
> +
> +     // convenience accessors
> *systemAppSupportDir { ^thisProcess.platform.systemAppSupportDir } > *userAppSupportDir { ^thisProcess.platform.userAppSupportDir } > *systemExtensionDir { ^thisProcess.platform.systemExtensionDir }
> Index: build/SCClassLibrary/Common/Files/PathName.sc
> ===================================================================
> --- build/SCClassLibrary/Common/Files/PathName.sc (revision 5713) > +++ build/SCClassLibrary/Common/Files/PathName.sc (working copy)
> @@ -174,6 +174,12 @@
>               ^number
>       }
>
> +     /* concatenation */
> +     +/+ { | path |
> +             var otherFullPath = (path.respondsTo(\fullPath)).if
> ({ path.fullPath }, { path.asString });
> +             ^this.class.new(fullPath +/+ otherFullPath)
> +     }
> +
>       /* additional methods jrh */
>
>       entries {
> Index: build/SCClassLibrary/Common/Quarks/Quark.sc
> ===================================================================
> --- build/SCClassLibrary/Common/Quarks/Quark.sc (revision 5713) > +++ build/SCClassLibrary/Common/Quarks/Quark.sc (working copy)
> @@ -37,7 +37,7 @@
> if (blob.isNil or: { blob.isKindOf (IdentityDictionary).not }) {
>                       Error("invalid quark").throw;
>               };
> -             ^this.new(blob)
> +             ^this.new(blob.know_(false))
>       }
>       *new { | blob |
>               ^super.new.init(blob)
> @@ -113,5 +113,18 @@
>               string = string ++ "\n";
>               string.postln;
>       }
> +
> +     // install action support
> +     doAction { |action|
> +             info[action].value(this);
> +     }
> +     localPath {
> +             // only valid in postInstall!
> +             ^Quarks.local.path +/+ path
> +     }
> +     build_scons { | ... args |
> + if (systemCmd("scons --directory=% %".format (this.localPath,
> args.join(" "))) != 0) {
> +                     Error("scons failed").throw;
> +             }
> +     }
>  }
> -
> Index: build/SCClassLibrary/Common/Quarks/Quarks.sc
> ===================================================================
> --- build/SCClassLibrary/Common/Quarks/Quarks.sc (revision 5713) > +++ build/SCClassLibrary/Common/Quarks/Quarks.sc (working copy)
> @@ -144,7 +144,7 @@
>               })
>       }
>       install { | name |
> -             var q, deps, installed;
> +             var q, localPath, installedPath;
>
>               if(this.isInstalled(name),{
>                       (name + "already installed").inform;
> @@ -158,9 +158,15 @@
>
> // do we have to create /quarks/ directory ? If so, do it.
>               this.checkDir;
> -
> +             localPath = local.path +/+ q.path;
> + installedPath = Platform.userExtensionDir.escapeChar($ ) ++ "/" +
> + local.name ++ "/" ++ q.path;
>               // install via symlink to Extensions/<quarks-dir>
> -             ("ln -s " +  local.path ++ "/" ++ q.path +
> Platform.userExtensionDir.escapeChar($ ) ++ "/" ++ local.name ++
> "/" ++ q.path).systemCmd;
> +             q.doAction(\preInstall);
> +             ("ln -s " + localPath + installedPath).systemCmd;
> +             q.doAction(\postInstall) { |e|
> +                     ("rm -f " + installedPath).systemCmd;
> +                     e.throw;
> +             };
>               (q.name + "installed").inform;
>       }
>       listInstalled {
> @@ -182,7 +188,9 @@
>               });
>
>               // install via symlink to Extensions/Quarks
> +             q.doAction(\preUninstall);
> ("rm " + Platform.userExtensionDir.escapeChar($ ) ++ "/" ++
> local.name ++ "/" ++ q.path).systemCmd;
> +             q.doAction(\postUninstall);
>               (q.name + "uninstalled").inform;
>       }
>  }
> (
> name:                         "scum",
> path:                         "scum",
> summary:              "hmmm ...",
> author:               "stefan kersten",
> organization: "scum",
> country:              "germany",
> since:                        "2004",
> url: "http://space.k-hornz.de/space/ supercollider::scum",
> postInstall:  { |quark|
>       quark.build_scons("install-local");
> },
> preUninstall: { |quark|
>       quark.build_scons("-c install-local");
> }
> )
> _______________________________________________
> sc-dev mailing list
> sc-dev@xxxxxxxxxxxxxxx
> http://www.create.ucsb.edu/mailman/listinfo/sc-dev

_______________________________________________
sc-dev mailing list
sc-dev@xxxxxxxxxxxxxxx
http://www.create.ucsb.edu/mailman/listinfo/sc-dev



--
http://www.mcld.co.uk
_______________________________________________
sc-dev mailing list
sc-dev@xxxxxxxxxxxxxxx
http://www.create.ucsb.edu/mailman/listinfo/sc-dev