Утилита для удаления привязок SourceSafe? - PullRequest
4 голосов
/ 18 мая 2009

Я ищу утилиту, которая автоматически удаляет привязки SourceSafe, учитывая местоположение файла решения. Я нашел несколько упоминаний об этом инструменте:

http://codebetter.com/blogs/darrell.norton/archive/2008/05/16/sourcesafe-binding-remover.aspx

Это выглядит как раз то, что мне нужно - удаляет файлы .scc и изменяет файлы .sln и. * Proj. Тем не менее, я не могу понять, как на самом деле получить утилиту - вложение в этом посте, похоже, на самом деле не там.

Кто-нибудь имеет копию этого инструмента или знает, где я могу найти что-то подобное, прежде чем сам переписать его? У меня есть 137 решений для удаления привязки, поэтому делать это вручную не является привлекательным вариантом.

Ответы [ 6 ]

7 голосов
/ 18 мая 2009

Я написал этот тип утилиты не так давно, и вы на правильном пути с тем, что нужно сделать.

Вот код, с которого можно начать. Он должен работать для всех проектов .Net (VS 2003 - VS 2008), включая проекты развертывания:

//get list of all files to be edited/removed
            SlnFiles = new List<FileInfo>(SelectedDir.GetFiles("*.sln", SearchOption.AllDirectories));
            ProjFiles = new List<FileInfo>(SelectedDir.GetFiles("*.*proj", SearchOption.AllDirectories));
            VssFiles = new List<FileInfo>(SelectedDir.GetFiles("*.vssscc", SearchOption.AllDirectories));
            VssFiles.AddRange(SelectedDir.GetFiles("*.vsscc", SearchOption.AllDirectories));
            VssFiles.AddRange(SelectedDir.GetFiles("*.scc", SearchOption.AllDirectories));
            VssFiles.AddRange(SelectedDir.GetFiles("*.vspscc", SearchOption.AllDirectories));

Удаление файлов VSS

//Delete all vss files
            VssFiles.ForEach(vss =>{vss.Delete();});

Редактирование файлов sln

//Edit sln files 
    SlnFiles.ForEach(sln =>
    {
    string fullName = sln.FullName;
    string relPath = sln.Directory.FullName.Replace(workingDir.FullName, string.Empty);

    StreamReader reader = sln.OpenText();
    String text = reader.ReadToEnd();
    reader.Close();
    string regex = "\tGlobalSection\\(SourceCodeControl\\) [\\s\\S]*? EndGlobalSection\r\n";
    RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);
    Regex reg = new Regex(regex, options);

    text = reg.Replace(text, string.Empty);
        if (text.StartsWith(Environment.NewLine))
            text = text.Remove(0, 2);
        StreamWriter writer = new StreamWriter(fullName);
        writer.Write(text);
        writer.Flush();
        writer.Close();
    });

Редактирование файлов proj

//edit proj files
    ProjFiles.ForEach(proj =>
    {
    string fullName = proj.FullName;
    string relPath = proj.Directory.FullName.Replace(workingDir.FullName, string.Empty);

    StreamReader reader = proj.OpenText();
    String text = reader.ReadToEnd();
    reader.Close();

    string regex = "\"*<*Scc.*?(>|\\W=\\W\").*?(>|\")";
    RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);
    Regex reg = new Regex(regex, options);

    text = reg.Replace(text, string.Empty);
    StreamWriter writer = new StreamWriter(fullName);
    writer.Write(text);
    writer.Flush();
    writer.Close();
    });
3 голосов
/ 30 июля 2010

Вот ссылка на вновь созданный VSSBindingRemover . Программное обеспечение было создано на основе ответов Джереми и juanjo.arana. Вы можете загрузить исходный код и исполняемый файл с GitHub.

1 голос
/ 12 мая 2010

добавьте следующий код, чтобы установить файл как недоступный только для чтения, прежде чем удалять их:

var allFiles = slnFiles.Union (projFiles) .Union (vssFiles) .ToList ();

allFiles.ForEach (f => f.IsReadOnly = true);

1 голос
/ 18 мая 2009

Если это только воздействие на файловую систему, которую вы обрабатываете, простые команды командной строки должны быть в состоянии сделать это:

del *.scc /s /q
attrib -r *.* /s
0 голосов
/ 08 января 2013

Я расширил Приложение Микаэля VSSBindingRemover . Вот полный список изменений:

  • Обновленное решение для Visual Studio 2010.
  • Обновлен проект до .NET 4.0.
  • Обновлены регулярные выражения для удаления пустых строк в файлах решений и проектов после очистки.
  • Добавлен код для удаления файлов .suo.
  • Модифицированный код для удаления свойства только для чтения для всех файлов.
  • Добавлена ​​поддержка типов проектов DTS (.dtproj), C ++ (.vcxproj) и Deployment (.vdproj).
  • Отдельные основные функции в свою собственную библиотеку, которые могут быть легко использованы в других проектах.
  • Отделил существующий клиент Windows от собственного проекта, который использует библиотеку основных функций.
  • Создан клиент командной строки, который использует библиотеку основных функций. Клиент командной строки принимает свой ввод как через параметры командной строки, так и через стандартный поток ввода, поэтому он поддерживает конвейерную обработку.
0 голосов
/ 19 января 2012

Я пользуюсь Cygwin, вы: P

find.exe . -type f -name *.dsp -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*Scc_ProjName.*$//g'
find.exe . -type f -name *.dsp -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*Scc_LocalPath.*$//g'
find.exe . -type f -name *.dsw -print0 | xargs -0 -r sed -i '/begin.source.code.control/,/end.source.code.control/d'
find.exe . -type f -name *.sln -print0 | xargs -0 -r sed -i '/GlobalSection(SourceCodeControl)/,/EndGlobalSection/d'
find.exe . -type f -name *.*proj -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*SccProjectName.*$//g'
find.exe . -type f -name *.*proj -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*SccLocalPath.*$//g'
find.exe . -type f -name *.*proj -print0 | xargs -0 -r perl -p -i.vssbak -e 's/^.*SccProvider.*$//g'
find.exe . -type f -name *.vssbak -print0 | xargs -0 -r rm -f 
find.exe . -type f -name *.*scc -print0 | xargs -0 -r rm -f 
...