您的位置:首页 > 其它

去除 VS.Net 2003 项目的 VSS 信息的脚本

2007-11-01 17:37 531 查看
  从google搜到的,以前用过一次,后来找不到了,今天好不容易又找到,写在这儿算作备忘。

  好像这段脚本是一个老外写的,VSS信息去除的比较彻底。

  使用方法:把这段代码保存为RemoveVssInfo.js,放到和xxx.sln文件相同的文件夹下,然后双击执行即可。

  代码如下:

/// Global ------------------------------------------------------

var deleteByForce = true;

var consoleOnly = true;

var defaultTimeOut = 1;

var showDetails = false;

var WSShell;

var fso;

var currentFolder;

var deletedFiles = 0;

var modifiedFiles = 0;

var ForReading = 1, ForWriting = 2, ForAppending = 8;

var CharSetDefault = -2, CharSetUnicode = -1, CharSetAscii = 0;

var AttrNormal = 0, AttrReadOnly = 1, AttrHidden = 2, AttrSystem = 4,

AttrVolume = 8, AttrDirectory = 16, AttrArchive = 32, AttrAlias = 1024,

AttrCompressed = 2048;

Init();

Main();

//Test();

/// Main ------------------------------------------------------

function Main() {

var text;

// say hello

text = "Remove from SourceSafe has started.";

Out(text,true);

COut("Working folder: \r\n"+ currentFolder);

// delete files

// *.suo, *.eto, *.vssscc, *.vspscc, vssver.scc, mssccprj.scc

DeleteFiles("[.]*([.]suo$|[.]eto$|[.]vssscc$|[.]vspscc$|vssver[.]scc$|mssccprj[.]scc$)");

// modify files

// *.etp, *.sln, *.csproj

ModifyFiles("[.]*([.]etp$|[.]sln$|[.]csproj$)");

// say goodbye

text = "Remove from SourceSafe has finished. \r\n\r\n"

+ "Deleted files: \t" + deletedFiles + "\r\n"

+ "Modified files: \t" + modifiedFiles + "\r\n";

Out(text,false);

}

function Init() {

// detect command line

try {

WScript.StdOut.WriteLine(" ");

} catch (e) {

consoleOnly = false;

}

// initialize

WSShell = new ActiveXObject("WScript.Shell");

fso = new ActiveXObject("Scripting.FileSystemObject");

currentFolder = GetCurrentFolder();

}

/// Files ------------------------------------------------------

// getcurrent folder

function GetCurrentFolder() {

return fso.GetFolder(fso.GetFile(WScript.ScriptFullName).ParentFolder);

}

// delete files by mask

function DeleteFiles(mask) {

var files = FindFiles(mask);

var i;

Out("Deleting files", true);

for (i=0; i<files.length; i++) {

try {

fso.DeleteFile(files[i], deleteByForce);

deletedFiles ++;

} catch (e) {

WScript.echo(e.Message);

}

}

if (deletedFiles == 0) {

COut("No files were deleted.");

}

}

// find files

function FindFiles(mask) {

return GetFiles(currentFolder, mask);

}

// determine, if filename matches given mask

function MatchesMask(file, mask) {

return new RegExp(mask).test(file);

}

// get files in current folder & subfolders

function GetFiles(folder, mask) {

var result = new Array();

// do files in current folder

var files = new Enumerator(folder.Files);

for (; !files.atEnd(); files.moveNext()) {

if (MatchesMask(files.item(), mask)) {

result.push("" + files.item());

}

}

// do subfolders in current folder

var folders = new Enumerator(folder.SubFolders);

for (; !folders.atEnd(); folders.moveNext()) {

result = result.concat(GetFiles(folders.item(), mask));

}

return result;

}

/// Output ------------------------------------------------------

// output

function Out(text, useTimeOut) {

if (useTimeOut) {

useTimeOut = defaultTimeOut;

} else {

useTimeOut = -1;

}

if (consoleOnly) {

WScript.StdOut.WriteLine(text);

} else {

WSShell.Popup(text, useTimeOut, "Remove from SourceSafe");

}

}

// output

function COut(text, useTimeOut) {

if (useTimeOut) {

useTimeOut = defaultTimeOut;

} else {

useTimeOut = -1;

}

if (consoleOnly) {

WScript.StdOut.WriteLine(text);

}

}

/// Modify ------------------------------------------------------

// modify all files matching given mask

function ModifyFiles(mask) {

var files = FindFiles(mask);

var i;

Out("Modifying files", true);

for (i=0; i<files.length; i++) {

// WScript.echo(files[i]);

// try {

ModifyFile(fso.GetFile(files[i]));

modifiedFiles ++;

// } catch (e) {

// WScript.echo(e.description);

// }

}

if (modifiedFiles == 0) {

COut("No files were modified.");

}

}

function ModifyFile(file) {

switch (fso.GetExtensionName(file.Path).toLowerCase()) {

case "etp":

ModifyFileETP(file);

break;

case "sln":

ModifyFileSLN(file);

break;

case "csproj":

ModifyFileCSPROJ(file);

break;

}

}

function ReadFile(file) {

var stream = file.OpenAsTextStream(ForReading, CharSetDefault);

text = stream.ReadAll();

stream.Close();

return text;

}

function WriteFile(file, text) {

var ro = ((file.Attributes & AttrReadOnly) != 0);

if (ro) file.Attributes -= AttrReadOnly;

var stream = file.OpenAsTextStream(ForWriting, CharSetDefault);

stream.Write(text);

stream.Close();

if (ro) file.Attributes += AttrReadOnly;

}

// remove element <SourceControlSettings></SourceControlSettings>

function ModifyFileETP(file) {

var text;

var re1 = new RegExp('(\\s*<SourceControlSettings(\\s[^>]*)?>[.\\s\\S\\r\\n]*<\\/SourceControlSettings>)','m');

text = ReadFile(file);

text = text.replace(re1, "");

WriteFile(file, text);

}

// remove section GlobalSection(SourceCodeControl) = preSolution EndGlobalSection

function ModifyFileSLN(file) {

var text;

var re1 = new RegExp('(\\s*GlobalSection\\(SourceCodeControl\\))[.\\r\\n\\s\\S]*?EndGlobalSection','m');

text = ReadFile(file);

text = text.replace(re1, "");

WriteFile(file, text);

}

// remove lines with SccProjectName, SccLocalPath, SccAuxPath, SccProvider

function ModifyFileCSPROJ(file) {

var text;

var re1 = new RegExp('(^\\s*SccProjectName = .*$)', 'm');

var re2 = new RegExp('(^\\s*SccLocalPath = .*$)', 'm');

var re3 = new RegExp('(^\\s*SccAuxPath = .*$)', 'm');

var re4 = new RegExp('(^\\s*SccProvider = .*$)', 'm');

text = ReadFile(file);

text = text.replace(re1, "");

text = text.replace(re2, "");

text = text.replace(re3, "");

text = text.replace(re4, "");

WriteFile(file, text);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: