Quiq::Cascm - Schnittstelle zu CA Harvest SCM
Quiq::Hash
Ein Objekt der Klasse stellt eine Schnittstelle zu einem CA Harvest SCM Server zur Verfügung.
https://docops.ca.com/ca-harvest-scm/13-0/en
https://search.ca.com/assets/SiteAssets/TEC486141_External/TEC486141.pdf
$scm = $class->new(@attVal);
Benutzername (-usr).
Passwort (-pw).
Datei (Pfad) mit verschlüsseltem Benuternamen und Passwort (-eh). Diese Authentisierungsmethode ist gegenüber user und password aus Sicherheitsgründen vorzuziehen.
Wie credentialsFile, nur für das hsql-Kommando, falls hierfür eine andere Authentisierung nötig ist.
Name des Brokers (-b).
Name des Projektes, auch Environment genannt (-en).
Pfad im Project (-vp).
Pfad zum (lokalen) Workspace-Verzeichnis.
Liste der Stufen, bginnend mit der untersten Stufe, auf der Workspace-Dateien aus- und eingecheckt werden.
Universal Database Locator für die CASCM-Datenbank. Ist dieser definiert, wird die CASCM-Datenbank direkt zugegriffen, nicht über das Programm hsql.
Lösche Temporäre Dateien nicht.
Schreibe Ausgabe mit ANSI Colorcodes.
Führe keine ändernden Kommandos aus.
Schreibe Information über die Kommandoausführung nach STDERR.
Objekt
Instantiiere ein Objekt der Klasse und liefere eine Referenz auf dieses Objekt zurück.
$abstract = $scm->abstract($regex);
Regex, der die Packages matcht, deren Inhalt angezeigt werden soll
Übersicht (String)
Erzeuge eine Übersicht über die Packages, deren Name den Regex $regex matcht, und ihren Inhalt.
$ ruv-dss-repo abstract Seitz_X S6800_0_Seitz_X_Deployment TTEST tools/post_deployment/deploy_ddl.pl 34 tools/post_deployment/deploy_udf.pl 28 S6800_0_Seitz_X_Deployment_Test TTEST ddl/table/test_table.sql 4 ddl/udf/lib/test_function.sql 1 S6800_0_Seitz_X_Fahrstuhl_1 Entwicklung S6800_0_Seitz_X_Fahrstuhl_2 Entwicklung S6800_0_Seitz_X_MetaData TTEST ddl/udf/lib/rv_create_dbobject_ddl.sql 5 lib/zenmod/DSS/MetaData.pm 14 S6800_0_Seitz_X_Portierte_Programme Entwicklung bin/stichtag.pl 1 bin/verd_prd_zuord_dim.pl 24 bin/vertr_kms_progn_hist.pl 4 lib/zenmod/Sparhist.pm 37 tab_clone.pl 4 tools/wasMussIchTesten.pl 1 S6800_0_Seitz_X_Portierte_Tabellen TTEST ddl/table/q12b067.sql 0 ddl/table/q98b3s33.sql 0 ddl/table/sf_ga_liste_online_renta.sql 1 ddl/table/sf_kredu_meldw_dz_zlms_vol_wkv.sql 6 ddl/table/sf_vden_agt_liste.sql 1 S6800_0_Seitz_X_Session TTEST ddl/udf/lib/rv_stage.sql 2 lib/zenmod/DSS/Session.pm 2 S6800_0_Seitz_X_ZenMods TTEST lib/zenmod/DSSDB/Greenplum.pm 108
$output = $scm->edit($repoFile,$package); $output = $scm->edit($repoFile,$package,$version);
Datei mit Repository-Pfadangabe.
Package, dem die ausgecheckte Datei (mit reservierter Version) beim Einchecken zugeordnet wird. Das Package muss nicht auf der untersten Stufe stehen. Befindet es sich auf einer höheren Stufe, wird intern ein Transportpackage erzeugt, das die Dateien zu der Stufe des Package bewegt.
Ausgabe der CASCM-Kommandos (String)
Checke die Repository-Datei $repoFile aus und lade Version $version in den Editor. Wird die Datei bearbeitet, d.h. nach dem Verlassen des Editors ist ihr Inhalt ein anderer als vorher, wird dieser Stand (nach Rückfage) als neue Version eingecheckt. Andernfalls wird ohne Änderung eingecheckt, wobei die Vergabe einer neuen Versionsnummer unterbleibt.
Das Editieren einer älteren Version kann genutzt werden, um eine in Arbeit befindliche Version zu übergehen. Ein weiteres Mal auf die zuvor aktuelle Version angewandt, kann die aktuelle Version wieder reaktiviert werden.
Bearbeite eine ältere Version, so dass diese vor der unfertigen aktuellen Version promotet werden kann.
Aktueller Stand:
$ $ dss-repo find-item DATEI 1 item_path 2 version 3 package 4 state 5 creationtime 6 username 1 2 3 4 5 6 | DATEI | 0 | PACKAGE1 | Produktion | 2020-02-27 14:05:30 | xv882js | | DATEI | 1 | PACKAGE2 | TTEST | 2020-02-27 14:06:16 | xv882js |
Alte Version editieren und zur neusten Version machen:
$ dss-repo create PACKAGE3 $ dss-repo edit DATEI PACKAGE3 0
Nächster Stand:
$ $ dss-repo find-item DATEI 1 item_path 2 version 3 package 4 state 5 creationtime 6 username 1 2 3 4 5 | DATEI | 0 | PACKAGE1 | Produktion | 2020-02-27 14:05:30 | xv882js | | DATEI | 1 | PACKAGE2 | TTEST | 2020-02-27 14:06:16 | xv882js | | DATEI | 2 | PACKAGE3 | Entwicklung | 2020-02-27 14:08:45 | xv882js |
Die in PACKAGE3 befindliche bearbeitete Version 2, die aus Version 0 hervorgegangen ist, kann nach Produktion promotet werden ohne den unfertigen Code aus Version 1.
Unfertigen Stand wieder zum aktuellen Stand machen, u.U. mit den gleichen vormaligen Änderungen:
$ dss-repo edit DATEI PACKAGE2 1
$ dss-repo find-item DATEI 1 item_path 2 version 3 package 4 state 5 creationtime 6 username 1 2 3 4 5 | DATEI | 0 | PACKAGE1 | Produktion | 2020-02-27 14:05:30 | xv882js | | DATEI | 1 | PACKAGE2 | TTEST | 2020-02-27 14:06:16 | xv882js | | DATEI | 2 | PACKAGE3 | Entwicklung | 2020-02-27 14:08:45 | xv882js | | DATEI | 2 | PACKAGE2 | TTEST | 2020-02-27 14:10:45 | xv882js |
$scm->view($repoFile);
nichts
Öffne die Repository-Datei $repoFile im Pager.
$output = $scm->putFiles($package,$repoDir,@files);
Package, dem die Dateien innerhalb von CASCM zugeordnet werden. Das Package muss nicht auf der untersten Stufe stehen. Befindet es sich auf einer höheren Stufe, wird intern ein Transportpackage erzeugt, das die Dateien zu der Stufe des Package bewegt.
Zielverzeichnis innerhalb des Workspace, in das die Dateien kopiert werden. Dies ist ein relativer Pfad.
Liste von Dateien außerhalb des Workspace.
Prüfe nicht, ob hinzugefügte Datei und Repository-Datei identisch sind.
Konkatenierte Ausgabe der der checkout- und checkin-Kommandos (String)
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.
$output = $scm->putDir($package,$dir);
Package, dem die Dateien innerhalb von CASCM zugeordnet werden. Das Package sollte sich auf der untersten Stufe befinden.
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.
Füge alle Dateien in Verzeichnis $dir via Methode put() zum Repository hinzu bzw. aktualisiere sie.
$output = $scm->checkout($package,@repoFiles);
Package, dem die ausgecheckte Datei (mit reservierter Version) zugeordnet wird.
Liste von Workspace-Dateien, die ausgecheckt werden.
Ausgabe des Kommandos (String)
Checke die Workspace-Dateien @repoFiles aus und liefere die Ausgabe des Kommandos zurück.
$output = $scm->checkin($package,$repoFile);
Package, dem die neue Version der Datei zugeordnet wird.
Datei innerhalb des Workspace. Der Dateipfad ist ein relativer Pfad.
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.
$version = $scm->versionNumber($repoFile);
Repository-Datei
Versionsnummer (Integer)
$info = $scm->versionInfo($repoFile);
Der Pfad der Repository-Datei.
Ermittele die Versionsinformation über Datei $repoFile und liefere diese zurück.
$file = $scm->getVersion($repoFile,$version,$destDir,@opt);
Repository-Datei, die gespeichert werden soll.
Version der Repository-Datei.
Zielverzeichnis, in dem die Repository-Datei gespeichert wird.
Prüfe nicht, ob die angegebene Version existiert. Dies spart einen CASCM Aufruf und ist sinnvoll, wenn die Richtigkeit der Versionsnummer gesichert ist, siehe deleteToVersion().
Hänge die Version an den Dateinamen an.
Pfad der Datei (String)
Speichere die Repository-Datei $repoFile der Version $version in Verzeichnis $destDir und liefere den Pfad der Datei zurück.
$diff = $scm->diff($repoFile,$version1,$version2);
Repository-Datei, deren Versionen verglichen werden.
Erste zu vergleichende Version der Repository-Datei.
Zweite zu vergleichende Version der Repository-Datei.
Differenz (String)
Ermittele die Differenz zwischen den beiden Versionen $version1 und $version2 der Repository-Datei $repoFile und liefere das Ergebnis zurück.
$bool = $scm->deleteVersion($repoFile); $bool = $scm->deleteVersion($repoFile,$version);
Der Pfad der zu löschenden Repository-Datei.
Version der Datei, die gelöscht werden soll.
Wahrheitswert: 1, wenn Löschung ausgeführt wurde, andernfalls 0.
Lösche die höchste Version oder bis zur Version $version die Repository-Datei $repoFile. Befinden sich davon eine oder mehrere Versionen nicht auf der untersten Stufe, wird ein temporäres Transport-Package erzeugt und die Versionen darüber vor dem Löschen auf die unterste Ebene bewegt.
Höchste Version der Datei lib/MetaData.pm löschen:
lib/MetaData.pm
$scm->deleteVersion('lib/MetaData.pm');
Alle Versionen der Datei lib/MetaData.pm löschen:
$scm->deleteVersion('lib/MetaData.pm',0);
Die Versionen bis 110 der Datei lib/MetaData.pm löschen:
$scm->deleteVersion('lib/MetaData.pm',110);
$output = $scm->passVersion($repoFile,$version,$package);
Ältere Version, die die neuere Version überholen soll.
Package, dem die neue ältere Version hinzugefügt wird.
Erzeuge eine neue Version von $repoFile mit der älteren Version $version und füge diese zu Package $package hinzu. Dies ist nützlich, wenn an der aktuellen Version vorbeigezogen werden soll.
$output = $scm->reduceVersion($repoFile,$version);
Versionsnummer, auf die die neuste Version zurückgeführt werden soll.
Boolean. 1, wenn Operation ausgeführt wurde, sonst 0. 0 wird geliefert, wenn der Nutzer die Rückfrage nach der Löschung der Dateien mit "nein" beantwortet.
Sichere den Quelltext der neusten Version, lösche alle Versionen bis und einschließlich Version $version und checke den gesicherten Quelltext ein. Der Ergebnis ist, dass die neuste Version zu Version $version wird.
$package = $scm->package($repoFile); $package = $scm->package($repoFile,$version);
Pfad der Repository-Datei (String).
Version der Repository-Datei (Integer).
Package-Name (String).
$tab = $scm->findItem($namePattern); $tab = $scm->findItem($namePattern,$minVersion);
Name des Item (File oder Directory), SQL-Wildcards sind erlaubt. Der Name ist nicht verankert, wird intern also als '%$namePattern%' abgesetzt.
Die Item-Version muss mindestens $minVersion sein.
Ergebnismengen-Objekt.
$output = $scm->moveItem($repoFile,$repoDir,$removePackage,$putPackage);
Repository-Pfad der Datei, die verschoben werden soll.
Repository-Pfad des Ziel-Verzeichnisses. Dieses Verzeichnis muss bereits existieren.
Package, das die per removeItem() entfernte Datei aufnimmt.
Package, das die per putFiles() hinzugefügte Datei aufnimmt.
Ausgabe der Kommandos (String)
Entferne Datei $repoFile aus dem Repository und füge sie unter dem neuen Repository-Pfad $repoDir wieder zum Repository hinzu. Verschiebe sie also innerhalb der Repository-Verzeichnisstruktur. Die entfernte Datei wird zu Package $removePackage hinzugefügt und die neue Datei zu Package $putPackage.
$output = $scm->removeItems($package,@repoFile);
Die Pfade der zu löschenden Repository-Dateien.
Package, in das die Löschung eingetragen wird.
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.
$file = $scm->repoFileToFile($repoFile);
Pfad (String)
Expandiere den Reository-Dateipfad zu einem absoluten Dateipfad und liefere diesen zurück.
$output = $scm->createPackage($package); $output = $scm->createPackage($package,$state);
Name des Package, das erzeugt werden soll.
State, auf dem das Package erzeugt werden soll.
Erzeuge Package $package auf Stufe $state und liefere die Ausgabe des Kommandos zurück.
$output = $scm->deletePackages(@packages);
Namen der Packages, die gelöscht werden sollwn.
Lösche die Packages @packages und liefere die Ausgabe der Kommandos zurück.
$output = $scm->renamePackage($oldName,$newName);
Bisheriger Name des Package.
Zukünftiger Name des Package.
Benenne Package $oldName in $newName um und liefere die Ausgabe des Kommandos zurück.
@rows | $tab = $scm->showPackage(@packages,@opt);
Datensätze oder Ergebnismengen-Objekt (Quiq::Database::ResultSet::Array)
Ermittele die in den Packages @packages enthaltenen Items und ihrer Versions und liefere diese Ergebnismenge zurück.
$scm->showPackage('S6800_0_Seitz_IMS_Obsolete_Files'); => 1 item_path 2 version 3 package_name 4 creation_time 5 username 6 versionstatus
$output = $scm->switchPackage($fromPackage,$toPackage,@files);
Name des Quellpakets (from package).
Name des Zielpakets (to package).
Dateien (versions), die übertragen werden sollen.
Übertrage die Dateien @files von Paket $fromPackage in Paket $toPackage. Sind keine Dateien angegeben, übertrage alle Dateien aus $fromPackage.
Per Default werden alle Versionen einer Datei übertragen. Soll eine bestimmte Version übertragen werden, wird der Suffix :VERSION an den Dateinamen angehängt.
$scm->promote($state,@packages);
Stufe, auf dem sich die Packages befinden.
Packages, die promotet werden sollen.
Promote die Package @packages von der Stufe $state auf die darüberliegende Stufe und liefere die Ausgabe des Kommandos zurück.
$scm->demote($state,@packages);
Stufe, auf dem sich das Package befindet.
Packages, die demotet werden sollen.
Demote die Packages @packages der Stufe $state auf die darunterliegende Stufe, und liefere die Ausgabe des Kommandos zurück.
$output = $scm->movePackage($state,$package,@opt);
Stufe, auf die das Package gebracht werden soll.
Package, das bewegt werden soll.
Frage den Benutzer, ob er die Post-Deployment-Bestätigung erhalten hat.
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.
$state = $scm->packageState($package);
Package.
Stufe.
Liefere die Stufe $state, auf der sich Package $package befindet. Existiert das Package nicht, liefere einen Leerstring ('').
$tab = $scm->listPackages(@opt); $tab = $scm->listPackages($likePattern,@opt);
Schränke die Liste auf Packages ein, deren Name $likePattern matchen.
Sortierkriterium.
Liste aller Packages (Array of Arrays). Im Skalarkontext eine Referenz auf die Liste.
Liefere die Liste aller Packages.
$scm->sync; $scm->sync($repoDir);
Zu synchronisierendes Workspace-Verzeichnis.
Bringe das Workspace-Verzeichnis $repoDir auf den Stand des Repository und liefere die Ausgabe des Kommandos zurück. Ist kein Verzeichnis angegeben, aktualisiere den gesamten Workspace.
@states | $stateA = $scm->states;
$tab = $scm->sql($sql); $tab = $scm->sql($file);
SELECT-Statement.
Datei mit SELECT-Statement.
Ergebnismengen-Objekt (Quiq::Database::ResultSet::Array)
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.
@arr = $scm->credentialsOptions;
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:
Authentisierung durch Datei mit verschlüsselten Credentials (-eh)
Authentisiertung durch Benutzername/Passwor (-usr, -pw)
Bevorzugt ist Methode 1, da sie sicherer ist als Methode 2.
$output = $scm->runCmd($cmd,$c);
Name des CASCM-Kommandos
Kommandozeilenobjekt mit den Optionen.
Inhalt der Ausgabedatei, die das Kommando geschrieben hat.
Führe das CA Harvest SCM Kommando $cmd mit den Optionen des Kommandozeilenobjekts $c aus und liefere den Inhalt der Ausgabedatei zurück.
$tab = $scm->runSql($sql);
SELECT-Statement, das gegen die CASCM-Datenbank abgesetzt wird.
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.
1.187
Frank Seitz, http://fseitz.de/
Copyright (C) 2020 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.