ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/xmlTools/trunk/posUpdate/XmlPatch.cs
(Generate patch)

Comparing xmlTools/trunk/posUpdate/XmlPatch.cs (file contents):
Revision 741 by s10k, Thu Mar 21 10:43:10 2013 UTC vs.
Revision 742 by s10k, Tue Mar 26 02:30:48 2013 UTC

# Line 13 | Line 13 | namespace xmlTools
13      {
14          String fileName;
15          String forceFiles = "";
16 +        bool globalNoBackups = false;
17  
18 <        public XmlPatch(String file)
18 >        public XmlPatch(String file, bool noBackups)
19          {
20              fileName = file;
21 +            globalNoBackups = noBackups;
22          }
23  
24 <        public XmlPatch(String file, String forceInFiles)
24 >        public XmlPatch(String file, String forceInFiles, bool noBackups)
25          {
26              fileName = file;
27              forceFiles = forceInFiles; //We support apply the operation in diverse forced files (NameOfFile parameter will be ignored)
28 +            globalNoBackups = noBackups;
29          }
30  
31          /// <summary>
# Line 134 | Line 137 | namespace xmlTools
137              //---------------------------------------------------XML Injection (start)
138              foreach (String currFile in filesToProcess)
139              {
140 <
141 <                Util.backupFile(currFile);
140 >                if (!this.globalNoBackups && !Util.ContainsIgnoreCase(operation, "NoBackups")) // only skip backup if specified via global parameter or in patch file
141 >                {
142 >                    Util.backupFile(currFile);
143 >                }
144  
145                  XmlDocument xdoc = new XmlDocument();
146                  xdoc.Load(currFile);
# Line 227 | Line 232 | namespace xmlTools
232              foreach (String currFile in filesToProcess)
233              {
234  
235 <                Util.backupFile(currFile);
235 >                if (!this.globalNoBackups && !Util.ContainsIgnoreCase(operation, "NoBackups")) // only skip backup if specified via global parameter or in patch file
236 >                {
237 >                    Util.backupFile(currFile);
238 >                }
239  
240                  XmlDocument xdoc = new XmlDocument();
241                  xdoc.Load(currFile);
# Line 287 | Line 295 | namespace xmlTools
295                      // Add the filename if it doesn't exists
296                      else
297                      {
298 <                        command = command.Insert(command.Length-1," -filename:" + this.forceFiles); // -2 to be inside quotes
298 >                        command = command.Insert(command.Length-1," -filename:" + this.forceFiles); // -1 to be inside quotes
299                      }
300  
301                      if (paramType != "")
# Line 304 | Line 312 | namespace xmlTools
312  
313                  }
314  
315 <                command = command.Replace("\"", ""); // remove quotes
308 <
309 <                ProcessStartInfo startInfo = new ProcessStartInfo();
310 <                if (!Util.IsRunningOnMono())
315 >                if (this.globalNoBackups && !Util.ContainsIgnoreCase(command,"nobackups")) // add noBackup flag if provided as global parameter
316                  {
317 <                    startInfo.FileName = Util.getExeFileName();
313 <                }
314 <                else{
315 <                    startInfo.FileName = "mono";
316 <                }
317 <                if (!Util.IsRunningOnMono())
318 <                {
319 <                    startInfo.Arguments = command;
320 <                }
321 <                else{
322 <                    startInfo.Arguments = Util.getExeFileName() + " " + command;
317 >                    command = command.Insert(command.Length - 1, " -nobackups"); // -1 to be inside quotes
318                  }
324                startInfo.UseShellExecute = false; // necessary to redirect output
325                startInfo.RedirectStandardOutput = true;
326                startInfo.RedirectStandardError = true;
327                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; // hide new process window
319  
320 <                Process p = System.Diagnostics.Process.Start(startInfo);
321 <                p.OutputDataReceived += commandStdOutputReceived;
322 <                p.ErrorDataReceived += commandStdErrorReceived;
332 <                p.BeginOutputReadLine();
333 <                p.BeginErrorReadLine();
334 <                p.WaitForExit();
320 >                command = command.Replace("\"", ""); // remove quotes
321 >
322 >                Program.Main(command.Split(' ')); // use the current process is more efficient than start a new one
323              }
324              catch (Exception e)
325              {
# Line 342 | Line 330 | namespace xmlTools
330              return true;
331          }
332  
345        /// <summary>
346        /// Reads asynchronously output from the new process where the command will be executed
347        /// </summary>
348        /// <param name="sender"></param>
349        /// <param name="e"></param>
350        private void commandStdOutputReceived(object sender, DataReceivedEventArgs e)
351        {
352
353            string myData = e.Data;
354
355            if (myData != null)
356            {
357                if (myData.EndsWith("\n"))
358                {
359                    Console.Write(myData);
360                }
361                else
362                {
363                    Console.WriteLine(myData);
364                }
365            }
366
367        }
368
369        private void commandStdErrorReceived(object sender, DataReceivedEventArgs e)
370        {
371
372            string myData = e.Data;
373
374            if (myData != null)
375            {
376                if (myData.EndsWith("\n"))
377                {
378                    Console.Error.Write(myData);
379                }
380                else
381                {
382                    Console.Error.WriteLine(myData);
383                }
384            }
385
386        }
387
333          private string getPatchParameter(string line, string parameterName)
334          {
335              string result = "";

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)