| 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> |
| 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); |
| 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); |
| 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 != "") |
| 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 |
|
{ |
| 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 = ""; |