示例#1
0
        /// Execute action
        public override object Execute()
        {
            DirectoryInfo d = new DirectoryInfo(Context.TransformStr(To, Transform));

            d.Create();
            if (Clean)
            {
                Delete del = new Delete {
                    From = d.ToString(), Recursive = true, ReadOnly = true
                };
                Context.Execute(del);
            }

            var zip = Context.Transform(From, Transform);


            var nf = new FileNameOnlyFilter(Syntax, Context.TransformStr(Filter, Transform));
            var df = new StringFilter(Syntax, Context.TransformStr(DirectoryFilter, Transform));

            var ret = extractZip(zip, d.FullName, nf, df);

            if (ReturnValue.IsBreak(ret))
            {
                return(null);
            }
            ReturnValue.RethrowIfException(ret);
            return(ret);
        }
示例#2
0
        /// Execute action
        public override object Execute()
        {
            downloadPackagesInfo();

            RowSet rs=new RowSet();
            Context.Initialize(rs);

            List<Package> toUpdate = new List<Package>();
            var filter = new StringFilter(Syntax, Context.TransformStr(Filter, Transform));
            //VerboseMessage("Filter: {0} {1}", Syntax, Dump.ToDump( Context.TransformStr(Filter, Transform)));
            foreach (var c in Items)
            {
                var rv=c.CheckVersion();
                Version currentVersion = null;
                string str = (rv==null?null:(ReturnValue.Unwrap(rv)??string.Empty).ToString());
                if (!string.IsNullOrEmpty(str))
                    currentVersion = new Version(str);

                var pinfo = GetPackage(c.Name);
                Version newVersion =(pinfo != null) ?pinfo.Version:null;

                rs.AddRow(new Vars(){
                    {"Package",c.FriendlyName},
                    {"Installed",(currentVersion==null)?"not installed":currentVersion.ToString()},
                    {"Available",(newVersion == null) ? "n/a" : newVersion.ToString()}}
                );

                bool update = false;
                if (currentVersion != null && ((newVersion > currentVersion) || ForceUpdate) && filter.IsMatch(c.Name))
                {
                    toUpdate.Add(c);
                    update = true;
                }
                VerboseMessage("{0}: {1}=>{2}. Update={3}",c.Name,currentVersion,newVersion,update);
            }

            Context.Out.WriteLine(string.Empty);
            Context.Out.WriteLine(rs.ToTextTable(TableFormatOptions.Header));

            if (toUpdate.Count==0)
            {
                Context.Out.WriteLine("All packages are up to date!");
                return null;
            }

            try
            {
                VerboseMessage("--- Downloading components... --- ");
                foreach (var c in toUpdate)
                    c.Download(this);
                VerboseMessage("--- Download completed. --- ");
                VerboseMessage(string.Empty);

                VerboseMessage("--- Starting update... ---");
                Context.Execute(BeforeUpdate);
                try
                {
                    foreach (var c in toUpdate)
                        c.DoUpdate(this);
                }
                finally
                {
                    Context.Execute(AfterUpdate);
                }
                VerboseMessage("--- Update completed. ---");
                VerboseMessage(string.Empty);
                return null;
            }
            finally
            {
                if (Cleanup)
                {
                    VerboseMessage("--- Cleaning up... ---");
                    foreach (var c in toUpdate)
                    {
                        try
                        {
                            c.Cleanup(this);
                        }
                        catch
                        {
                            Context.WriteLine(OutputType.Error, string.Format("Cleanup failed for {0}...", c.Name));
                        }
                    }
                    VerboseMessage("--- Cleaning completed. ---");
                    VerboseMessage(string.Empty);

                }
            }
        }
示例#3
0
文件: Zip.cs 项目: xsharper/xsharper
        /// Execute action
        public override object Execute()
        {
            string        f = Context.TransformStr(From, Transform);
            DirectoryInfo src;
            IStringFilter nf, df;
            string        trg = Context.TransformStr(To, Transform);

            if (File.Exists(f))
            {
                src = new DirectoryInfo(new FileInfo(f).DirectoryName);
                nf  = new SelfIgnoreFilenameOnlyFilter(trg, FilterSyntax.Pattern, Regex.Escape(Path.GetFileName(f)));
                df  = new StringFilter(null);
            }
            else
            {
                src = new DirectoryInfo(f);
                nf  = new SelfIgnoreFilenameOnlyFilter(trg, Syntax, Context.TransformStr(Filter, Transform));
                df  = new FullPathFilter(Syntax, Context.TransformStr(DirectoryFilter, Transform), BackslashOption.Add);
            }

            if (!src.Exists)
            {
                throw new DirectoryNotFoundException(string.Format("Directory {0} does not exist", src));
            }

            bool   deleteTrg = false;
            Stream str       = null;
            var    outTo     = Context.TransformStr(OutTo, Transform);

            try
            {
                if (outTo != null)
                {
                    str = new MemoryStream();
                }
                else
                {
                    str       = Context.CreateStream(trg);
                    deleteTrg = true;
                }

                var ret = createZip(str, src.FullName, nf, df);
                if (trg != null && outTo != null)
                {
                    deleteTrg = true;
                    using (var ctx2 = Context.CreateStream(trg))
                        ((MemoryStream)str).WriteTo(ctx2);
                }
                if (outTo != null)
                {
                    Context.OutTo(outTo, ((MemoryStream)str).ToArray());
                }
                deleteTrg = false;
                if (ReturnValue.IsBreak(ret))
                {
                    return(null);
                }
                ReturnValue.RethrowIfException(ret);
                return(ret);
            }
            finally
            {
                if (str != null)
                {
                    str.Dispose();
                }

                if (deleteTrg)
                {
                    File.Delete(trg);
                }
            }
        }
示例#4
0
文件: Zip.cs 项目: xsharper/xsharper
        /// Execute action
        public override object Execute()
        {
            string f = Context.TransformStr(From, Transform);
            DirectoryInfo src;
            IStringFilter nf, df;
            string trg = Context.TransformStr(To, Transform);

            if (File.Exists(f))
            {
                src = new DirectoryInfo(new FileInfo(f).DirectoryName);
                nf = new SelfIgnoreFilenameOnlyFilter(trg, FilterSyntax.Pattern, Regex.Escape(Path.GetFileName(f)));
                df = new StringFilter(null);
            }
            else
            {
                src = new DirectoryInfo(f);
                nf = new SelfIgnoreFilenameOnlyFilter(trg, Syntax, Context.TransformStr(Filter, Transform));
                df = new FullPathFilter(Syntax, Context.TransformStr(DirectoryFilter, Transform), BackslashOption.Add);
            }

            if (!src.Exists)
                throw new DirectoryNotFoundException(string.Format("Directory {0} does not exist", src));

            bool deleteTrg = false;
            Stream str = null;
            var outTo = Context.TransformStr(OutTo, Transform);
            try
            {
                if (outTo != null)
                    str = new MemoryStream();
                else
                {
                    str = Context.CreateStream(trg);
                    deleteTrg = true;
                }

                var ret = createZip(str, src.FullName, nf, df);
                if (trg != null && outTo != null)
                {
                    deleteTrg = true;
                    using (var ctx2 = Context.CreateStream(trg))
                        ((MemoryStream)str).WriteTo(ctx2);
                }
                if (outTo != null)
                    Context.OutTo(outTo, ((MemoryStream)str).ToArray());
                deleteTrg = false;
                if (ReturnValue.IsBreak(ret))
                    return null;
                ReturnValue.RethrowIfException(ret);
                return ret;
            }
            finally
            {
                if (str != null)
                    str.Dispose();

                if (deleteTrg)
                    File.Delete(trg);
            }
        }
示例#5
0
        /// Execute action
        public override object Execute()
        {
            downloadPackagesInfo();

            RowSet rs = new RowSet();

            Context.Initialize(rs);

            List <Package> toUpdate = new List <Package>();
            var            filter   = new StringFilter(Syntax, Context.TransformStr(Filter, Transform));

            //VerboseMessage("Filter: {0} {1}", Syntax, Dump.ToDump( Context.TransformStr(Filter, Transform)));
            foreach (var c in Items)
            {
                var     rv             = c.CheckVersion();
                Version currentVersion = null;
                string  str            = (rv == null?null:(ReturnValue.Unwrap(rv) ?? string.Empty).ToString());
                if (!string.IsNullOrEmpty(str))
                {
                    currentVersion = new Version(str);
                }

                var     pinfo      = GetPackage(c.Name);
                Version newVersion = (pinfo != null) ?pinfo.Version:null;

                rs.AddRow(new Vars()
                {
                    { "Package", c.FriendlyName },
                    { "Installed", (currentVersion == null)?"not installed":currentVersion.ToString() },
                    { "Available", (newVersion == null) ? "n/a" : newVersion.ToString() }
                }
                          );

                bool update = false;
                if (currentVersion != null && ((newVersion > currentVersion) || ForceUpdate) && filter.IsMatch(c.Name))
                {
                    toUpdate.Add(c);
                    update = true;
                }
                VerboseMessage("{0}: {1}=>{2}. Update={3}", c.Name, currentVersion, newVersion, update);
            }

            Context.Out.WriteLine(string.Empty);
            Context.Out.WriteLine(rs.ToTextTable(TableFormatOptions.Header));

            if (toUpdate.Count == 0)
            {
                Context.Out.WriteLine("All packages are up to date!");
                return(null);
            }

            try
            {
                VerboseMessage("--- Downloading components... --- ");
                foreach (var c in toUpdate)
                {
                    c.Download(this);
                }
                VerboseMessage("--- Download completed. --- ");
                VerboseMessage(string.Empty);

                VerboseMessage("--- Starting update... ---");
                Context.Execute(BeforeUpdate);
                try
                {
                    foreach (var c in toUpdate)
                    {
                        c.DoUpdate(this);
                    }
                }
                finally
                {
                    Context.Execute(AfterUpdate);
                }
                VerboseMessage("--- Update completed. ---");
                VerboseMessage(string.Empty);
                return(null);
            }
            finally
            {
                if (Cleanup)
                {
                    VerboseMessage("--- Cleaning up... ---");
                    foreach (var c in toUpdate)
                    {
                        try
                        {
                            c.Cleanup(this);
                        }
                        catch
                        {
                            Context.WriteLine(OutputType.Error, string.Format("Cleanup failed for {0}...", c.Name));
                        }
                    }
                    VerboseMessage("--- Cleaning completed. ---");
                    VerboseMessage(string.Empty);
                }
            }
        }
示例#6
0
        /// Execute action
        public override object Execute()
        {
            DirectoryInfo d = new DirectoryInfo(Context.TransformStr(To, Transform));
            d.Create();
            if (Clean)
            {
                Delete del = new Delete { From = d.ToString(), Recursive = true, ReadOnly = true };
                Context.Execute(del);
            }

            var zip = Context.Transform(From, Transform);

            var nf = new FileNameOnlyFilter(Syntax, Context.TransformStr(Filter,Transform));
            var df = new StringFilter(Syntax, Context.TransformStr(DirectoryFilter,Transform));

            var ret=extractZip(zip, d.FullName, nf, df);
            if (ReturnValue.IsBreak(ret))
                return null;
            ReturnValue.RethrowIfException(ret);
            return ret;
        }