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...
Пока на собственное сообщение не было ответов, его можно удалить.