/////////////////////////////////////////////////////////// // GGBuildTools // // Набор утилит для сборки проектов Gipat Group // // Copyright (C) 2007 Gipat Group // // Распространяется на условиях // // Gipat Group's opened EI-editor-utility license // // версии 1.0 // // // // www.gipatgroup.org // /////////////////////////////////////////////////////////// //К работе над данным файлом приложили руки, ноги.... короче аффтары: // 1) Sagrer (sagrer@yandex.ru) //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// // Служебный класс для VerRevUpdater // //////////////////////////////////////////////////////////// unit VerRevUpdServiceClass; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, ExtraFunctionsLcl, GGConsUtilServiceClass, GGBuildToolsShared, ExtraFileUtilsLCL, VerRevUpdLogic; const GGBT_VerRevUpdaterAppName = ' - Version revision updater'; type TVerRevUpdServiceClass = class (TGGConsUtilServiceClass) //Класс с основным функционалом и данными VerRevUpdater private protected LogicClass : TVerRevUpdaterLogic; //Защищенные методы. procedure PostExternalMessage(const TextMessage : AnsiString); //Функция для вывода мессаги другими объектами. public //Переменные SconfFilename : AnsiString; //Конструкторы-деструкторы... constructor Create; override; destructor Destroy; override; //Открытые методы... procedure ProcessParameters; override; //Проверить параметры командной строки. procedure DoWork; override; //Выполнить боевую задачу %). procedure ShowDescription; override; //Вывести описание утилиты. procedure ShowOptions; override; //Вывести справку по использованию тулсы. end; var VerRevUpdServClass : TVerRevUpdServiceClass; implementation ///////////////////////////////////////////// // TVerRevUpdServClass // ///////////////////////////////////////////// //-----------------------------------------// // Конструкторы-деструкторы... // //-----------------------------------------// constructor TVerRevUpdServiceClass.Create; begin //Проставить дефолтные значения... SconfFilename := ''; //Создать вложенные объекты классов... LogicClass := TVerRevUpdaterLogic.Create; //Вбить имя приложения. Self.GGConsAppName := GGBT_VerRevUpdaterAppName; //Выполнить конструктор предка... inherited; end; destructor TVerRevUpdServiceClass.Destroy; begin //Выкидываем мусор LogicClass.Free; //Выполнить унаследованный деструктор inherited; end; //------------------------------------------// // Защищенные методы... // //------------------------------------------// procedure TVerRevUpdServiceClass.PostExternalMessage(const TextMessage : AnsiString); //Функция для вывода мессаги другими объектами. begin Writeln(TextMessage); end; //------------------------------------------// // Открытые методы... // //------------------------------------------// procedure TVerRevUpdServiceClass.ProcessParameters; //Проверить параметры командной строки. begin //Выполнить унаследованную функцию inherited; if Application.HasOption('filepath') then begin //Прочитать имя файла проекта. Self.SconfFilename := Application.GetOptionValue('filepath'); end; end; procedure TVerRevUpdServiceClass.DoWork; //Выполнить боевую задачу %). begin //Выполнить нужно одну из задач - по её завершении ProcessFurther := false //и дальше нифига не выполняется. //Выполнить унаследованную функцию inherited; //Если ничего до сих пор не выполнилось - то выполняем боевую задачу.... if ProcessFurther = true then begin //Блокировка других веток ProcessFurther := false; //Работаем.... if Application.HasOption('filepath') = true then begin //Собсно выполняем боевую задачу. //Выводим версию софтины... Self.ShowVersion(); Writeln(''); //Смотрим - чего там за такое имя файла передали... if IsGlobalPath(Self.SconfFilename) = false then begin //Путь не глобален. Оформлен ли он как локальный? if IsLocalPath(Self.SconfFilename) = false then begin //Как локальный тоже не оформлен - оформляем. Self.SconfFilename := FixLocalPath(Self.SconfFilename); end; //Превращаем локальный путь в глобальный. Self.SconfFilename := ResolveLocalPath(Self.SconfFilename,GetCurrentDir); end; //В данный момент у нас должен быть глобальный путь. Проверим существует ли файл. if FileExists(Self.SconfFilename) = true then begin //Существует. //Собсно сейчас можно настроить класс логики и запустить выполнение задачи. LogicClass.PostExternalMessage := @Self.PostExternalMessage; if LogicClass.UpdateProjVer(Self.SconfFilename) = false then begin //Если вернула ошибку - выведем её. Writeln('Error! '+LogicClass.ErrorMessage); Writeln(''); end else begin //Фсеок. Writeln('Done.'); Writeln(''); end; end else begin //Облом. Сообщаем про ошибк. Writeln('Error! Project sconf file is not exists! : '); Writeln(Self.SconfFilename); Writeln(''); end; end else begin //Обломс. Нехватает опции которая обязательна для работы софтины. Self.ShowHelp(); Writeln('Error!!! "--filepath=" option is required!'); Writeln(''); end; end; end; procedure TVerRevUpdServiceClass.ShowDescription; //Вывести описание утилиты. begin inherited; Writeln('Description:'); Writeln(' Update''s a version of your project. For details - read help pls.'); Writeln(' To show help message you can use can use "-?" command-line option.'); end; procedure TVerRevUpdServiceClass.ShowOptions; //Вывести справку по использованию тулсы. begin //Вызвать унаследованную функцию... inherited; //И собсно запостить нашенские дополнения %). Writeln(' --filepath= : sets path to the project''s configuration file.'); end; ///////////////////////////////// initialization //Инициализация %). Выделим память, создадим всякую херню... как обычно в общем %) begin VerRevUpdServClass := TVerRevUpdServiceClass.Create; end; finalization //Мочим все лишнее... begin VerRevUpdServClass.Free; end; end.