The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::Cascm - Schnittstelle zu CA Harvest SCM

BASE CLASS

Quiq::Hash

DESCRIPTION

Ein Objekt der Klasse stellt eine Schnittstelle zu einem CA Harvest SCM Server zur Verfügung.

SEE ALSO

METHODS

Konstruktor

new() - Instantiiere Objekt

Synopsis

    $scm = $class->new(@attVal);

Attributes

user => $user

Benutzername (-usr).

password => $password

Passwort (-pw).

credentialsFile => $file

Datei (Pfad) mit verschlüsseltem Benuternamen und Passwort (-eh). Diese Authentisierungsmethode ist gegenüber user und password aus Sicherheitsgründen vorzuziehen.

hsqlCredentialsFile => $file

Wie credentialsFile, nur für das hsql-Kommando, falls hierfür eine andere Authentisierung nötig ist.

broker => $broker

Name des Brokers (-b).

projectContext => $project

Name des Projektes, auch Environment genannt (-en).

viewPath => $viewPath

Pfad im Project (-vp).

workspace => $workspace

Pfad zum (lokalen) Workspace-Verzeichnis.

states => \@states

Liste der Stufen, bginnend mit der untersten Stufe, auf der Workspace-Dateien aus- und eingecheckt werden.

udl => $udl

Universal Database Locator für die CASCM-Datenbank. Ist dieser definiert, wird die CASCM-Datenbank direkt zugegriffen, nicht über das Programm hsql.

keepTempFiles => $bool (Default: 0)

Lösche Temporäre Dateien nicht.

dryRun => $bool (Default: 0)

Führe keine ändernden Kommandos aus.

verbose => $bool (Default: 1)

Schreibe Information über die Kommandoausführung nach STDERR.

Returns

Objekt

Description

Instantiiere ein Objekt der Klasse und liefere eine Referenz auf dieses Objekt zurück.

Datei bearbeiten

edit() - Bearbeite Repository-Datei

Synopsis

    $output = $scm->edit($repoFile,$package);

Arguments

$repoFile

Datei mit Repository-Pfadangabe.

$package

Package, dem die ausgecheckte Datei (mit reservierter Version) beim Einchecken zugeordnet wird.

Returns

Ausgabe der CASCM-Kommandos (String)

Description

Öffne die Repository-Datei $repoFile im Editor. Nach dem Verlassen des Editors wird geprüft, ob die Datei (eine Kopie im lokalen Verzeichnis) verändert wurde. Falls ja, wird die Repository-Datei ausgecheckt und die gänderte lokale Datei unter einer neuen Versionsnummer eingecheckt. Das Package $package wird auf die unterste Stufe bewegt und wieder zurück bewegt, falls nötig.

view() - Repository-Datei ansehen

Synopsis

    $scm->view($repoFile);

Arguments

$repoFile

Datei mit Repository-Pfadangabe.

Returns

nichts

Description

Öffne die Repository-Datei $repoFile im Pager.

Externe Dateien

putFiles() - Füge Dateien zum Repository hinzu

Synopsis

    $output = $scm->putFiles($package,$repoDir,@files);

Arguments

$package

Package, dem die Dateien innerhalb von CASCM zugeordnet werden.

$repoDir

Zielverzeichnis innerhalb des Workspace, in das die Dateien kopiert werden. Dies ist ein relativer Pfad.

@files

Liste von Dateien außerhalb des Workspace.

Returns

Konkatenierte Ausgabe der der checkout- und checkin-Kommandos (String)

Description

Kopiere die Dateien @files in das Workspace-Verzeichnis $repoDir und checke sie anschließend ein, d.h. füge sie zum Repository hinzu. Eine Datei, die im Workspace-Verzeichnis schon vorhanden ist, wird zuvor ausgecheckt.

Mit dieser Methode ist es möglich, sowohl neue Dateien zum Workspace hinzuzufügen als auch bereits existierende Dateien im Workspace zu aktualisieren. Dies geschieht für den Aufrufer transparent, er braucht sich um die Unterscheidung nicht zu kümmern.

putDir() - Füge Dateien eines Verzeichnisbaums zum Repository hinzu

Synopsis

    $output = $scm->putDir($package,$dir);

Arguments

$package

Package, dem die Dateien innerhalb von CASCM zugeordnet werden.

$dir

Quellverzeichnis, dem die Dateien entnommen werden. Die Pfade innerhalb von $dir werden als Repository-Pfade verwendet. Die Repository-Pfade müssen vorab existieren, sonst wird eine Exception geworfen.

Returns

Konkatenierte Ausgabe der der checkout- und checkin-Kommandos (String)

Description

Füge alle Dateien in Verzeichnis $dir via Methode put() zum Repository hinzu bzw. aktualisiere sie. Details siehe dort.

Workspace-Dateien

checkout() - Checke Repository-Dateien aus

Synopsis

    $output = $scm->checkout($package,@repoFiles);

Arguments

$package

Package, dem die ausgecheckte Datei (mit reservierter Version) zugeordnet wird.

@repoFiles

Liste von Workspace-Dateien, die ausgecheckt werden.

Returns

Ausgabe des Kommandos (String)

Description

Checke die Workspace-Dateien @repoFiles aus und liefere die Ausgabe des Kommandos zurück.

checkin() - Checke Workspace-Datei ein

Synopsis

    $output = $scm->checkin($package,$repoFile);

Arguments

$package

Package, dem die neue Version der Datei zugeordnet wird.

$repoFile

Datei innerhalb des Workspace. Der Dateipfad ist ein relativer Pfad.

Returns

Ausgabe des Kommandos (String)

Description

Checke die Workspace-Datei $repoFile ein, d.h. übertrage ihren Stand als neue Version ins Repository, ordne diese dem Package $package zu und liefere die Ausgabe des Kommandos zurück.

versionNumber() - Versionsnummer Repository-Datei

Synopsis

    $version = $scm->versionNumber($repoFile);

Arguments

$repoFile

Repository-Datei

Returns

Versionsnummer (Integer)

versionInfo() - Versionsinformation zu Repository-Datei

Synopsis

    $info = $scm->versionInfo($repoFile);

Arguments

$repoFile

Der Pfad der Repository-Datei.

Returns

Ausgabe des Kommandos (String)

Description

Ermittele die Versionsinformation über Datei $repoFile und liefere diese zurück.

deleteVersion() - Lösche Repository-Datei

Synopsis

    $output = $scm->deleteVersion($repoFile);

Arguments

$repoFile

Der Pfad der zu löschenden Repository-Datei.

Returns

Ausgabe des Kommandos (String)

Description

Lösche die höchste Version der Repository-Datei (Item) $repoFile. Dies geht nur, wenn sich diese Version auf der untersten Stufe (Entwicklung) befindet.

findItem() - Zeige Information über Item an

Synopsis

    $tab = $scm->findItem($namePattern);

Arguments

$namePattern

Name des Item (File oder Directory), SQL-Wildcards sind erlaubt.

Returns

$tab

Ergebnismengen-Objekt.

removeItems() - Lösche Items

Synopsis

    $output = $scm->removeItems($package,@repoFile);

Arguments

@repoFiles

Die Pfade der zu löschenden Repository-Dateien.

$package

Package, in das die Löschung eingetragen wird.

Returns

Ausgabe des Kommandos (String)

Description

Erzeuge neue Versionen der Items @repoFiles, welche die Items als zu Löschen kennzeichnen und trage diese in das Package $package ein. Wird das Package promotet, werden die Items auf der betreffenden Stufe gelöscht.

repoFileToFile() - Expandiere Repo-Pfad zu absolutem Pfad

Synopsis

    $file = $scm->repoFileToFile($repoFile);

Arguments

$repoFile

Datei mit Repository-Pfadangabe.

Returns

Pfad (String)

Description

Expandiere den Reository-Dateipfad zu einem absoluten Dateipfad und liefere diesen zurück.

Packages

createPackage() - Erzeuge Package

Synopsis

    $output = $scm->createPackage($package);

Arguments

$packge

Name des Package, das erzeugt werden soll.

Returns

Ausgabe des Kommandos (String)

Description

Erzeuge Package $package und liefere die Ausgabe des Kommandos zurück.

deletePackage() - Lösche Package

Synopsis

    $output = $scm->deletePackage($package);

Arguments

$packge

Name des Package, das gelöscht werden soll.

Returns

Ausgabe des Kommandos (String)

Description

Lösche Package $package und liefere die Ausgabe des Kommandos zurück.

renamePackage() - Benenne Package um

Synopsis

    $output = $scm->renamePackage($oldName,$newName);

Arguments

$oldName

Bisheriger Name des Package.

$newName

Zukünftiger Name des Package.

Returns

Ausgabe des Kommandos (String)

Description

Benenne Package $oldName in $newName um und liefere die Ausgabe des Kommandos zurück.

showPackage() - Inhalt eines Package

Synopsis

    $tab = $scm->showPackage($package);

Returns

Ergebnismengen-Objekt (Quiq::Database::ResultSet::Array)

Description

Ermittele die in Package $package enthaltenen Items und ihrer Versions und liefere diese Ergebnismenge zurück.

Example

    $scm->showPackage('S6800_0_Seitz_IMS_Obsolete_Files');
    =>
    1 id
    2 item_path
    3 item_type
    4 version
    5 versiondataobjid
    
    1         2                                         3   4    5
    | 4002520 | CPM_META/q07i101.cols.xml               | 1 |  1 | 5965056 |
    | 3992044 | CPM_META/q07i102.cols.xml               | 1 |  9 | 6017511 |
    | 4114775 | CPM_META/q07i105.cols.xml               | 1 |  2 | 6146470 |
    | 3992045 | CPM_META/q07i109.cols.xml               | 1 |  6 | 5968199 |
    | 3992046 | CPM_META/q07i113.cols.xml               | 1 |  6 | 5968200 |
    | 4233433 | CPM_META/q24i200shw.cpmload.xml         | 1 | 13 | 6327078 |
    | 4233434 | CPM_META/q24i200shw.flm.cpmload.xml     | 1 |  4 | 6318106 |
    | 4233435 | CPM_META/q24i210kumul.cpmload.xml       | 1 | 11 | 6327079 |
    | 4233436 | CPM_META/q24i210kumul.flm.cpmload.xml   | 1 |  4 | 6318108 |
    | 4233437 | CPM_META/q24i210risiko.cpmload.xml      | 1 | 13 | 6336633 |
    | 4233438 | CPM_META/q24i210risiko.flm.cpmload.xml  | 1 |  4 | 6318110 |
    | 4233439 | CPM_META/q24i210schaden.cpmload.xml     | 1 | 13 | 6327081 |
    | 4233440 | CPM_META/q24i210schaden.flm.cpmload.xml | 1 |  4 | 6318112 |
    | 4003062 | CPM_META/q33i001.cols.xml               | 1 |  3 | 5981911 |
    | 4003063 | CPM_META/q33i003.cols.xml               | 1 |  4 | 5981912 |
    | 4003064 | CPM_META/q33i005.cols.xml               | 1 |  3 | 5981913 |
    | 4003065 | CPM_META/q33i206.cols.xml               | 1 |  3 | 5981914 |
    | 4115111 | CPM_META/q44i912.cols.xml               | 1 |  2 | 6157279 |
    | 4144529 | CPM_META/q44i912.cpmload.xml            | 1 |  2 | 6318380 |
    | 4144530 | CPM_META/q44i912.flm.cpmload.xml        | 1 |  2 | 6318381 |
    | 4115112 | CPM_META/q44i913.cols.xml               | 1 |  3 | 6237929 |
    | 4115113 | CPM_META/q44i914.cols.xml               | 1 |  4 | 6249865 |
    | 4144531 | CPM_META/q44i914.cpmload.xml            | 1 |  7 | 6318382 |
    | 4144532 | CPM_META/q44i914.flm.cpmload.xml        | 1 |  2 | 6318383 |
    | 4095239 | CPM_META/q46i080.cpmload.xml            | 1 |  3 | 6327923 |
    | 4095240 | CPM_META/q46i080.flm.cpmload.xml        | 1 |  2 | 6318576 |
    | 4095550 | CPM_META/q46i081.cpmload.xml            | 1 |  3 | 6327924 |
    | 4095551 | CPM_META/q46i081.flm.cpmload.xml        | 1 |  2 | 6318578 |
    | 4095548 | CPM_META/q46i084.cpmload.xml            | 1 |  3 | 6327925 |
    | 4095549 | CPM_META/q46i084.flm.cpmload.xml        | 1 |  2 | 6318580 |
    | 4003101 | CPM_META/q80i102.cols.xml               | 1 |  4 | 5974529 |
    | 3936189 | ddl/table/q31i001.sql                   | 1 |  1 | 5885525 |
    | 3936190 | ddl/table/q31i002.sql                   | 1 |  1 | 5885526 |
    | 3936191 | ddl/table/q31i003.sql                   | 1 |  1 | 5885527 |
    | 3936192 | ddl/table/q31i004.sql                   | 1 |  1 | 5885528 |
    | 3936193 | ddl/table/q31i007.sql                   | 1 |  1 | 5885529 |
    | 3936194 | ddl/table/q31i014.sql                   | 1 |  1 | 5885530 |
    | 3936195 | ddl/table/q31i017.sql                   | 1 |  1 | 5885531 |
    | 4144537 | ddl/table/q44i912_cpm.sql               | 1 |  1 | 6163139 |
    | 4144538 | ddl/table/q44i914_cpm.sql               | 1 |  1 | 6163140 |
    | 3936311 | ddl/table/q65i001.sql                   | 1 |  1 | 5885647 |
    | 3936312 | ddl/table/q65i002.sql                   | 1 |  1 | 5885648 |
    | 3936313 | ddl/table/q65i003.sql                   | 1 |  1 | 5885649 |
    | 3936314 | ddl/table/q65i030.sql                   | 1 |  1 | 5885650 |
    | 4060343 | ddl/udf/rv_cpm_load_ims.sql             | 1 |  1 | 6038412 |
    | 4060442 | ddl/udf/rv_cpm_load_imsh.sql            | 1 |  2 | 6039389 |
    | 4060883 | ddl/udf/rv_cpm_load_imshr.sql           | 1 |  1 | 6039379 |

switchPackage() - Übertrage Item in anderes Paket

Synopsis

    $output = $scm->switchPackage($stage,$fromPackage,$toPackage,@files);

Arguments

$stage

Stufe (stage), auf der sich die Packete befinden.

$fromPackage

Name des Quellpakets (from package).

$toPackage

Name des Zielpakets (to package).

@files

Dateien (versions), die übertragen werden sollen.

Returns

Ausgabe des Kommandos (String)

Description

Übertrage die Dateien @files von Paket $fromPackage in Paket $toPackage.

promote() - Promote Packages

Synopsis

    $scm->promote($state,@packages);

Arguments

$state

Stufe, auf dem sich die Packages befinden.

@packges

Packages, die promotet werden sollen.

Returns

Ausgabe des Kommandos (String)

Description

Promote die Package @packages von der Stufe $state auf die darüberliegende Stufe und liefere die Ausgabe des Kommandos zurück.

demote() - Demote Packages

Synopsis

    $scm->demote($state,@packages);

Arguments

$state

Stufe, auf dem sich das Package befindet.

@packages

Packages, die demotet werden sollen.

Returns

Ausgabe des Kommandos (String)

Description

Demote die Packages @packages der Stufe $state auf die darunterliegende Stufe, und liefere die Ausgabe des Kommandos zurück.

movePackage() - Bringe Package auf Zielstufe

Synopsis

    $scm->movePackage($state,$package);

Arguments

$state

Stufe, auf die das Package gebracht werden soll.

$packge

Package, das bewegt werden soll.

Returns

Ausgabe des Kommandos (String)

Description

Bringe das Package $package von der aktuellen Stufe auf die Zielstufe $state und liefere die Ausgabe des Kommandos zurück. Liegt die Zielstufe über der aktuellen Stufe, wird das Package promotet, andernfalls demotet.

packageState() - Stufe des Pakets

Synopsis

    $state = $scm->packageState($package);

Arguments

$package

Package.

Returns

$state

Stufe.

Description

Liefere die Stufe $state, auf der sich Package $package befindet. Existiert das Package nicht, liefere einen Leerstring ('').

listPackages() - Liste aller Pakete

Synopsis

    $tab = $scm->listPackages;

Returns

@packages | $packageA

Liste aller Packages (Array of Arrays). Im Skalarkontext eine Referenz auf die Liste.

Description

Liefere die Liste aller Packages.

Workspace

sync() - Synchronisiere Workspace mit Repository

Synopsis

    $scm->sync;

Description

Bringe den Workspace auf den Stand des Repository und liefere die Ausgabe des Kommandos zurück.

States

states() - Liste der Stufen

Synopsis

    @states | $stateA = $scm->states;

Database

sql() - Führe SQL aus

Synopsis

    $tab = $scm->sql($sql);
    $tab = $scm->sql($file);

Arguments

$sql

SELECT-Statement.

$file

Datei mit SELECT-Statement.

Returns

Ergebnismengen-Objekt (Quiq::Database::ResultSet::Array)

Description

Führe ein SELECT-Statement gegen die CASCM-Datenbank aus und liefere ein Ergebnismengen-Objekt zurück. Das SELECT-Statement kann als String $sql übergeben werden oder sich in einer Datei $file befinden.

Private Methoden

credentialsOptions() - Credential-Optionen

Synopsis

    @arr = $scm->credentialsOptions;

Description

CASCM kennt mehrere Authentisierungsmöglichkeiten, die sich durch Aufrufoptionen unterscheiden. Diese Methode liefert die passenden Optionen zu den beim Konstruktor-Aufruf angegebenen Authentisierungs-Informationen. unterschieden werden:

  1. Authentisierung durch Datei mit verschlüsselten Credentials (-eh)

  2. Authentisiertung durch Benutzername/Passwor (-usr, -pw)

Bevorzugt ist Methode 1, da sie sicherer ist als Methode 2.

runCmd() - Führe Kommando aus

Synopsis

    $output = $scm->runCmd($cmd,$c);

Arguments

$cmd

Name des CASCM-Kommandos

$c

Kommandozeilenobjekt mit den Optionen.

Returns

$output

Inhalt der Ausgabedatei, die das Kommando geschrieben hat.

Description

Führe das CA Harvest SCM Kommando $cmd mit den Optionen des Kommandozeilenobjekts $c aus und liefere den Inhalt der Ausgabedatei zurück.

runSql() - Führe SQL-Statement aus

Synopsis

    $tab = $scm->runSql($sql);

Arguments

$sql

SELECT-Statement, das gegen die CASCM-Datenbank abgesetzt wird.

Returns

Ergebnismengen-Objekt (Quiq::Database::ResultSet::Array)

Description

Führe SELECT-Statement $sql auf der CASCM-Datenbank aus und liefere die Ergebnismenge zurück. Ist ein UDL definiert (s. Konstruktoraufruf) wird die Selektion direkt auf der Datenbank ausgeführt, andernfalls über das CASCM-Kommando hsql.

VERSION

1.144

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.