скрипт к VSS
От: aaro  
Дата: 04.12.07 07:53
Оценка:
Доброго времени суток всем!
У меня возникла след. проблема :
столкнулся с необходимостью написать "скрипт", который бы умел загружать с хранилища VSS последние версии файлов и компилил бы проект!!
Это, вообще, реально?!
И если да — то в каком направлении рыть?
Заранее благодарю за ответы!!


04.12.07 13:02: Перенесено модератором из 'Управление проектами' — IB
Re: скрипт к VSS
От: &reY Украина http://www.livejournal.com/~1000turov/
Дата: 04.12.07 08:02
Оценка: +1
Здравствуйте, aaro, Вы писали:

A>столкнулся с необходимостью написать "скрипт", который бы умел загружать с хранилища VSS последние версии файлов и компилил бы проект!!

A>Это, вообще, реально?!
A>И если да — то в каком направлении рыть?

реально
для получения данных из VSS копать в сторону ss.exe и его параметров командной строки
Re[2]: скрипт к VSS
От: aaro  
Дата: 04.12.07 08:27
Оценка:
Здравствуйте, &reY, Вы писали:

Y>реально

Y>для получения данных из VSS копать в сторону ss.exe и его параметров командной строки

О, спасибо!!
А может есть ссылочки хорошие, где на эту тему можно почитать?!
Проблема усугубляется тем, что скрипт должен уметь загружать файлы, вообще, в любую папку .. А компилить чем можно7
Re[3]: скрипт к VSS
От: &reY Украина http://www.livejournal.com/~1000turov/
Дата: 04.12.07 08:43
Оценка: 3 (1)
Здравствуйте, aaro, Вы писали:

A>А может есть ссылочки хорошие, где на эту тему можно почитать?!


c:\Program Files\Microsoft Visual Studio\VSS\SSUSEXP.CHM
ключевые слова ss.exe ss.ini

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1182810&SiteID=1
http://www.softsteel.co.uk/tutorials/vss/index.html

A>Проблема усугубляется тем, что скрипт должен уметь загружать файлы, вообще, в любую папку .. А компилить чем можно7


зависит от того на чём у тебя исходники
обычно используют *ant (nant, want) или make или msbuild
Re[4]: скрипт к VSS
От: John Grey Украина  
Дата: 04.12.07 08:52
Оценка:
Здравствуйте, &reY, Вы писали:

A>>Проблема усугубляется тем, что скрипт должен уметь загружать файлы, вообще, в любую папку .. А компилить чем можно7


Y>зависит от того на чём у тебя исходники

Y>обычно используют *ant (nant, want) или make или msbuild
Зависит от того чем надо собирать... Главное чтобы эти "сборщики" стояли на машине, где будет запускаться скрипт, или хотя бы была возможность их на ней запустить. Вот сейчас разбираю скрипт, который собирает проект в 3 различных студиях(с++: 6, 2003, 2005; VB6; + чуть Delphi + чуть скриптов для сборки инсталятора в ISDeveloper)
Так что в написании сборочных скриптов надо только желание и упорство, ибо в принципе это вещь простая.

ЗЫ
Советую прочитать статью RSDN "Уроки bat'аники"
Re: скрипт к VSS
От: LMars Россия  
Дата: 04.12.07 09:05
Оценка:
Здравствуйте, aaro, Вы писали:

A>столкнулся с необходимостью написать "скрипт", который бы умел загружать с хранилища VSS последние версии файлов и компилил бы проект!!


А можно не писать скрипт... а сразу поюзать систему сборки, CruiseControl.NET, например.
Re[2]: скрипт к VSS
От: aaro  
Дата: 04.12.07 09:48
Оценка:
Здравствуйте, LMars, Вы писали:

LM>А можно не писать скрипт... а сразу поюзать систему сборки, CruiseControl.NET, например.


Вопрос только в том, насколько оптимальней это будет, чем скрипт..
Скрипт запустить любой сможет легко и просто, а изучать CruiseControl.NET, думаю, многим из коллег придётся не по душе.(
Re[5]: скрипт к VSS
От: Аноним  
Дата: 05.12.07 07:42
Оценка:
Здравствуйте, John Grey, Вы писали:

JG>Здравствуйте, &reY, Вы писали:


A>>>Проблема усугубляется тем, что скрипт должен уметь загружать файлы, вообще, в любую папку .. А компилить чем можно7


Y>>зависит от того на чём у тебя исходники

Y>>обычно используют *ant (nant, want) или make или msbuild
JG>Зависит от того чем надо собирать... Главное чтобы эти "сборщики" стояли на машине, где будет запускаться скрипт, или хотя бы была возможность их на ней запустить. Вот сейчас разбираю скрипт, который собирает проект в 3 различных студиях(с++: 6, 2003, 2005; VB6; + чуть Delphi + чуть скриптов для сборки инсталятора в ISDeveloper)
JG>Так что в написании сборочных скриптов надо только желание и упорство, ибо в принципе это вещь простая.

JG>ЗЫ

JG>Советую прочитать статью RSDN "Уроки bat'аники"

пасиб!
всё прочитал!!! проект на VC++.net!
чем такой лучше и проще всего собрать?
Re[6]: скрипт к VSS
От: John Grey Украина  
Дата: 05.12.07 10:58
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>пасиб!

А>всё прочитал!!! проект на VC++.net!
А>чем такой лучше и проще всего собрать?

Да хоть вот так:

>>call "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat"

>>"C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.com" "sln_file_path" /BUILD %config% %bldproj% /OUT >>.\_log.txt

%config% — какую конфигурацию собирать Debug или Release.
%bldproj% — какой проект из sln файла рассматривать как основной.
Re[6]: скрипт к VSS
От: Sergey Chadov Россия  
Дата: 05.12.07 17:09
Оценка:
Здравствуйте, <Аноним>, Вы писали:


А>пасиб!

А>всё прочитал!!! проект на VC++.net!
А>чем такой лучше и проще всего собрать?

devenv + bat'ник
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[7]: скрипт к VSS
От: Left2 Украина  
Дата: 06.12.07 09:09
Оценка: +1
SC>devenv + bat'ник
devenv.com + js-файл. Логика билда имеет тендецию разрастаться, а поддерживать javascript-файлы намного легче чем батники — там хотя бы отладчик есть. ИМХО, конечно.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[8]: скрипт к VSS
От: Sergey Chadov Россия  
Дата: 06.12.07 17:16
Оценка:
Здравствуйте, Left2, Вы писали:

SC>>devenv + bat'ник

L>devenv.com + js-файл. Логика билда имеет тендецию разрастаться, а поддерживать javascript-файлы намного легче чем батники — там хотя бы отладчик есть. ИМХО, конечно.
Я бы вообще предпочел Ruby.
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[3]: скрипт к VSS
От: Lloyd Россия  
Дата: 06.12.07 17:22
Оценка:
Здравствуйте, aaro, Вы писали:

A>Скрипт запустить любой сможет легко и просто, а изучать CruiseControl.NET, думаю, многим из коллег придётся не по душе.(


Изучение CruiseControl для коллег может свестись к рассказу о CCTray на 5 минут.
Re[9]: скрипт к VSS
От: Left2 Украина  
Дата: 07.12.07 18:35
Оценка:
SC>>>devenv + bat'ник
L>>devenv.com + js-файл. Логика билда имеет тендецию разрастаться, а поддерживать javascript-файлы намного легче чем батники — там хотя бы отладчик есть. ИМХО, конечно.
SC>Я бы вообще предпочел Ruby.

Для кросплатформенных проектов — может быть.
А если всё ограничено Visual Studio — тут у JS преимущество — его за собой таскать не нужно, он всегда в системе есть.
Хотя, если руби знаешь в разы лучше джаваскрипта — то почему бы и нет...
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[10]: скрипт к VSS
От: Sergey Chadov Россия  
Дата: 08.12.07 21:35
Оценка:
Здравствуйте, Left2, Вы писали:


L>Для кросплатформенных проектов — может быть.

L>А если всё ограничено Visual Studio — тут у JS преимущество — его за собой таскать не нужно, он всегда в системе есть.
Это да. Хотя играет роль, только если проект распространяется в исходниках. Для проектов, которые компилятся только на машинах девелоперов и билд-сервере вобщем-то без разницы.

L>Хотя, если руби знаешь в разы лучше джаваскрипта — то почему бы и нет...

Ну да, мне просто привычнее, к тому же многие задачи выполняются в разы меньшим объемом кода, который на мой взгляд еще и понятнее.
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[3]: скрипт к VSS
От: bnk СССР http://unmanagedvisio.com/
Дата: 09.12.07 10:40
Оценка: +1
Здравствуйте, aaro, Вы писали:

A>Здравствуйте, LMars, Вы писали:


LM>>А можно не писать скрипт... а сразу поюзать систему сборки, CruiseControl.NET, например.


A>Вопрос только в том, насколько оптимальней это будет, чем скрипт..

A>Скрипт запустить любой сможет легко и просто, а изучать CruiseControl.NET, думаю, многим из коллег придётся не по душе.(

IMHO оно того стоит.
Введя систему сборки удается навести какой-то "общий порядок", что ли.
Только надо учитывать, что для использования такой системы скорее всего понадобится отдельный компьютер-сервер,
где проект собственно и будет собираться.
С другой стороны VSS же вы где-то держите? Так что сервер наверняка есть..

А "изучать" CruiseControl проидется только тому, кто будет все настраивать (тебе?)
Дальше оно работает "само по себе". То есть кто-то что-то зачекинил в VSS — проект автоматически собрался.
Re[7]: скрипт к VSS
От: aaro  
Дата: 10.12.07 14:46
Оценка:
Здравствуйте, John Grey, Вы писали:

JG>Здравствуйте, Аноним, Вы писали:


А>>пасиб!

А>>всё прочитал!!! проект на VC++.net!
А>>чем такой лучше и проще всего собрать?

JG>Да хоть вот так:


>>>call "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat"

>>>"C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.com" "sln_file_path" /BUILD %config% %bldproj% /OUT >>.\_log.txt

JG>%config% — какую конфигурацию собирать Debug или Release.

JG>%bldproj% — какой проект из sln файла рассматривать как основной.

А как при использовании devenv задать папку, в которую будет всё компилиться?
Re[8]: скрипт к VSS
От: John Grey Украина  
Дата: 10.12.07 14:56
Оценка: 3 (1)
Здравствуйте, aaro, Вы писали:

A>А как при использовании devenv задать папку, в которую будет всё компилиться?

А вот какую папку использовать для компиляции уже прописывается в настроках каждого проекта — т.е. надо открыть solution-файл в студии и уже там настраивать. По другому задать куда собирать нельзя(если конечно не изменять файл проектов во время билда), но эти пути могут быть относительны.
Re[9]: скрипт к VSS
От: aaro  
Дата: 11.12.07 08:32
Оценка:
Здравствуйте, John Grey, Вы писали:

JG>Здравствуйте, aaro, Вы писали:


A>>А как при использовании devenv задать папку, в которую будет всё компилиться?

JG>А вот какую папку использовать для компиляции уже прописывается в настроках каждого проекта — т.е. надо открыть solution-файл в студии и уже там настраивать. По другому задать куда собирать нельзя(если конечно не изменять файл проектов во время билда), но эти пути могут быть относительны.
Может кто знает тогда как это с msbuild делать?
пробовал /property:outDir=С:\Path не помогает.(
Re[10]: скрипт к VSS
От: LMars Россия  
Дата: 11.12.07 10:43
Оценка:
Здравствуйте, aaro, Вы писали:

A>Может кто знает тогда как это с msbuild делать?

A>пробовал /property:outDir=С:\Path не помогает.(

Если не ошибаюсь, должно быть /property:OutputDir=С:\Path
Re[11]: скрипт к VSS
От: aaro  
Дата: 11.12.07 10:52
Оценка:
Здравствуйте, LMars, Вы писали:

LM>Здравствуйте, aaro, Вы писали:


A>>Может кто знает тогда как это с msbuild делать?

A>>пробовал /property:outDir=С:\Path не помогает.(

LM>Если не ошибаюсь, должно быть /property:OutputDir=С:\Path

нет .. ни OutDir, ни OutputDir, ни OutputPath .. ни остальные мыслимые вариации не приносят ожидаемого эффекта! Кто знает в чём проблема, кроме моего ДНК ???
Re: скрипт к VSS
От: Conr Россия  
Дата: 11.12.07 11:29
Оценка: 3 (1)
Здравствуйте, aaro, Вы писали:

A>Это, вообще, реально?!

A>И если да — то в каком направлении рыть?
A>Заранее благодарю за ответы!!
В свое время пользовал вот это:

dc_build.js:
function js_include(file)
{
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var f = fso.OpenTextFile(file, 1);
    str = f.ReadAll();
    f.Close();
    return str;
}

eval(js_include("bscripting.js"));

var WshShell = new ActiveXObject("WScript.Shell");
var tempdir = "c:\\temp\\test\\get";
var devPath = "C:\\Program Files\\Microsoft Visual Studio .NET 2003\\Common7\\IDE\\devenv.exe";

var db = new VssObject("\\\\VSSServer\\VSS_Desktop\\SRCSAFE_INI");

db.GetLatest("$/Personal/Vit/GUISample",tempdir);

var command = devPath + " /build Release \""+tempdir+"\\GUISample.sln\"";
WScript.Echo(command);
var oExec = WshShell.Exec(command);

while (oExec.Status == 0)
{
     WScript.Sleep(100);
}
WScript.Echo(oExec.Status);

// setup
var setupPath = tempdir + "\\Setup\\release.iss";
oExec = WshShell.Exec("\"C:\\Program Files\\Inno Setup 5\\ISCC.exe\" "+setupPath);
while (oExec.Status == 0)
{
     WScript.Sleep(100);
}
WScript.Echo(oExec.Status);



bscripting.js:

/*
Как это можно использовать?

1. чтобы не копипастить весь bscripting.js в свои скрипты, нужно его 
подключить. Стандартных аналогов include в WSH нет, так что придется 
сделать небольшой финт ушами. А именно, скопировать в свой скрипт эту 
функцию: 
 
    function js_include(file)
    {
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var f = fso.OpenTextFile(file, 1);

        str = f.ReadAll();
        f.Close();
        return str;
    }

и далее ее использовать следующим образом:
 
    eval(js_include("path_to_the\bscripting.js"));

2. После шага 1 можно пользоваться классом VssObject.
Все методы, если не оговорено иное, во-первых, возвращают строки с 
результатом, которые можно писать в лог, а во-вторых, рекурсивные.

    var db = new VssObject();
    var db = new VssObject(path_to_the_SRCSAFE_INI,user,password);

2.1. Подключение к базе.

    db.Open(path_to_the_SRCSAFE_INI,user,password);

все параметры как и в конструкторе необязательны, если что-то не задано, 
то соответствующее значение возмется из настроек SS клиента, если он 
установлен, если нет, то ССЗБ, ничего работать не будет.

2.2. Получение последней версии

    GetLatest(sspath,localpath,label);

sspath        путь в базе
localpath    путь на диске, если файлы уже есть, то они обновятся
label        необязательный параметр, если задан, то будут получены только 
            файлы с этой меткой

2.3. Получение списка checked out файлов

    var list = db.GetCheckedOut(sspath);

вернет String Array со списком таких файлов

2.4. LabelLatest(sspath,label)

sspath        путь в базе
label        собственно метка

2.5. Если нужно что-то еще, то инфа по VSS 6.0 Automation есть тут:
ms-help://MS.MSDNQTR.2005JAN.1033/dnvss/html/vssauto.htm
(с точностью до версии MSDN)



3. Вспомогательные функции. Собственно, пока только одна :)

3.1. var str = ExtractVersionInfo(resfile,type);

Выдирает из RC-файла нужную информацию, в зависимости от type:

    0 - FILEVERSION
    1 - PRODUCTVERSION
    
*/

//----------------------------------------------------------------------
var VSSFLAG_USERRONO = 1;
var VSSFLAG_USERROYES = 2;
var VSSFLAG_TIMENOW = 4;
var VSSFLAG_TIMEMOD = 8;
var VSSFLAG_TIMEUPD = 12;
var VSSFLAG_EOLCR = 16;
var VSSFLAG_EOLLF = 32;
var VSSFLAG_EOLCRLF = 48;
var VSSFLAG_REPASK = 64;
var VSSFLAG_REPREPLACE = 128;
var VSSFLAG_REPSKIP = 192;
var VSSFLAG_REPMERGE = 256;
var VSSFLAG_CMPFULL = 512;
var VSSFLAG_CMPTIME = 1024;
var VSSFLAG_CMPCHKSUM = 1536;
var VSSFLAG_CMPFAIL = 2048;
var VSSFLAG_RECURSNO = 4096;
var VSSFLAG_RECURSYES = 8192;
var VSSFLAG_FORCEDIRNO = 16384;
var VSSFLAG_FORCEDIRYES = 32768;
var VSSFLAG_KEEPNO = 0x00010000;
var VSSFLAG_KEEPYES = 0x00020000;
var VSSFLAG_DELNO = 0x00040000;
var VSSFLAG_DELYES = 0x00080000;
var VSSFLAG_DELNOREPLACE = 0x000c0000;
var VSSFLAG_BINTEST = 0x00100000;
var VSSFLAG_BINBINARY = 0x00200000;
var VSSFLAG_BINTEXT = 0x00300000;
var VSSFLAG_DELTAYES = 0x00400000;
var VSSFLAG_DELTANO = 0x00800000;
var VSSFLAG_UPDASK = 0x01000000;
var VSSFLAG_UPDUPDATE = 0x02000000;
var VSSFLAG_UPDUNCH = 0x03000000;
var VSSFLAG_GETYES = 0x04000000;
var VSSFLAG_GETNO = 0x08000000;
var VSSFLAG_CHKEXCLUSIVEYES = 0x10000000;
var VSSFLAG_CHKEXCLUSIVENO = 0x20000000;
var VSSFLAG_HISTIGNOREFILES = 0x40000000;

function VssObject(ini,user,pass)
{
    this.m_db = new ActiveXObject("SourceSafe");
    this.m_user = "";
    this.m_pass = "";

    if( user )
        this.m_user = user;
    if( pass )
        this.m_pass = pass;

    if( ini )
        this.Open(ini,user,pass);
    else
        this.m_db.Open();
}

VssObject.prototype.Open = function(ini,user,pass)
{
    this.m_db.Open(ini,user,pass);
}

VssObject.prototype.GetLatest = function(sspath,localpath,label)
{
    try
    {
        var ssitem = this.m_db.VSSItem(sspath); 
        var flags = VSSFLAG_RECURSYES | VSSFLAG_REPREPLACE | VSSFLAG_FORCEDIRNO;
        if( !label )
            ssitem.Get(localpath, flags);
        else
        {
            var ssversion = ssitem.Version(label);
            ssitem.Get(localpath, flags);            
        }
    }
    catch(e)
    {
        return e.message;
    }

    return "Latest version";
}
Re[12]: скрипт к VSS
От: John Grey Украина  
Дата: 12.12.07 08:32
Оценка: 3 (1)
Здравствуйте, aaro, Вы писали:

A>>>Может кто знает тогда как это с msbuild делать?

A>>>пробовал /property:outDir=С:\Path не помогает.(

LM>>Если не ошибаюсь, должно быть /property:OutputDir=С:\Path

A>нет .. ни OutDir, ни OutputDir, ни OutputPath .. ни остальные мыслимые вариации не приносят ожидаемого эффекта! Кто знает в чём проблема, кроме моего ДНК ???

вообще-то эти ключевые слова описаны в MSDN... адрес не помню
попробуй в индексе посмотреть "outputpath property" — а там уже и на правила установки можно выйти...

возможно ты пытаешься переопределить это свойство для sln-файла — и оно не может выполнить именно из-за этого(путь определяется для каждого проекта отдельно).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.