<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>Initializer for Perforce Servers</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<meta name="keywords" content="">
<meta name="generator" content"JBake">
<!-- Le styles -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/asciidoctor.css" rel="stylesheet">
<link href="css/base.css" rel="stylesheet">
<link href="css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="js/html5shiv.js"></script>
<![endif]-->
<!-- Fav and touch icons -->
<!--<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">-->
<link rel="shortcut icon" href="favicon.ico">
</head>
<body>
<div id="wrap">
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<ul class="nav navbar-nav">
<li><a href="index.html">Initializer</a></li>
<li><a href="overview.html">Overview</a></li>
<li><a href="data.html">Data</a></li>
<li><a href="../javadoc/index.html">Javadoc</a></li>
</ul>
</div>
</div>
</nav>
<div class="container">
<h1>Initializer Overview</h1><p>When developing applications on top of the Perforce server, you often want to start with a server with real data in a sensible configuration. When these apps need to run against <em>multiple versions</em> of Perforce, you're faced with figuring out how to set up each instance in the same way. This is the job of the initializer: take a bunch of files and metadata, and set up your Perforce instance. Now, you can, say, run the same system tests in different configurations of Perforce.</p><p>The initializer uses a directory of .json files that describe changes to be made, along with versions of data to "seed" into the system. See the <a href="data.html">Data</a> page for details of how to set this up. This directory is intended to be checked in with your system tests.</p><p>When you have the data set up, you'll then execute the initializer either using the command line, or, via gradle plugins. Both of these options are described below.</p><h2>Requirements</h2>
<ol>
<li><p>Java 8</p></li>
<li><p>A running Perforce instance, this tool does not actually download the p4d executable, and generally assumes you've just set it up without a lot of configuration</p></li>
</ol><h2>Notable Restrictions</h2><p>This system always sets security to level 2 at the moment.</p><h2>Executing using the Command Line</h2><p>The first part of executing via the command line is downloading the "complete" jar distribution.</p><p><a href="http://dl.bintray.com/tristanjuricek/generic/initializer/0.1.2/#initializer-complete.jar">Version 0.1.2</a></p><h3>Create A Configuration File</h3><p>From here, you'll need to create a configuration file. Here's an example:</p>
<pre><code>options:
dataRootDir: src/test/perforce
triggersDir: build/perforce/work/triggers
clientRootDir: build/perforce/clients
</code></pre><p>This is a <a href="http://yaml.org">YAML</a> file, so save this content in a file like <code>config.yml</code>.</p><p>The main directory you need is <code>dataRootDir</code>. This is the <a href="data.html">data directory tree</a> contains all your JSON files and data to be seeded.</p><p>The <code>triggersDir</code> is used only if you're creating triggers; this is the directory we write out the trigger file for use by the Perforce instance.</p><p>The <code>clientRootDir</code> is used by all temporary clients as a working area.</p><p>Note that this assumes a Perforce instance is running on localhost:1666. If this is not the case, you'll need an additional section in the config file:</p>
<pre><code>connectionSettings:
hostname: localhost
port: 1666
</code></pre><h3>Execution</h3><p>Execute downloaded jar file with your configuration:</p>
<pre><code>% java -jar initializer-complete.jar config.yml
</code></pre><h2>Executing using Gradle</h2><p>First, set up your <code>buildscript</code> repository configuration for both the <code>initializer-gradle-plugin</code> and the <code>perforce-gradle-plugin</code>:</p>
<pre><code>buildscript {
repositories {
jcenter()
}
dependencies {
classpath("com.perforce.workshop.tjuricek:perforce-gradle-plugin:0.1.2")
classpath("com.perforce.workshop.tjuricek:initializer-gradle-plugin:0.1.1")
}
}
</code></pre><p>Then, just apply the plugins:</p>
<pre><code>apply plugin: 'perforce'
apply plugin: 'perforce-initializer'
</code></pre><p>You'll only need to then run the <code>initPerforce</code> task once:</p>
<pre><code>% ./gradlew initPerforce
</code></pre><p>From there, you can start and stop the test server using <code>stopPerforce</code> and <code>startPerforce</code> tasks.</p><p>This assumes that by default you've stored all your data under the <code>src/test/perforce</code>. You can reconfigure this:</p>
<pre><code>initializer {
sources = project.file('another/directory')
}
</code></pre>
</div>
</div><!-- #wrap -->
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="js/jquery-1.11.1.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/run_prettify.js"></script>
</body>
</html>
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #4 | 9174 | tjuricek | Fix header | ||
| #3 | 9173 | tjuricek | Added gradle instructions and removed hideous footer in site documentation. | ||
| #2 | 9172 | tjuricek | 0.1.2 Added command line execution options and documentation to run the initializer locally. | ||
| #1 | 9165 | tjuricek |
Some documentation framework and a fatjar style distribution for the initializer to run outside of a gradle plugin. Upped the version to 0.1.2, but this may need some testing before it's really guaranteed to work in standalone mode |