From 6781dd75bb5ea90a6ba91a81b95b4c67cb6f9641 Mon Sep 17 00:00:00 2001
From: "James E. Blair" <jeblair@openstack.org>
Date: Tue, 18 Jun 2013 15:24:09 -0700
Subject: [PATCH] Add simple script to make an index page.

Change-Id: I2e8cb84fd26a9e45f9d6cbf42682e6b94d207413
---
 .gitignore |  1 +
 README.rst | 18 ++++++++++++
 index.html | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 make-index | 75 +++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 180 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 README.rst
 create mode 100644 index.html
 create mode 100755 make-index

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..53752db
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+output
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..7380870
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,18 @@
+Publications Repository
+=======================
+
+Each publication should get its own branch and is a living document.
+Each branch should have a README.rst file where the first line is the
+title of the presentation.
+
+Each time a publication is presented or published, the branch should
+be tagged (with a signed, annotated tag).  The first line of the tag
+message should be the title of the event or publication.  For example,
+if the presentation "overview" was given at LCA 2013, you might tag it
+with:
+
+  git tag -s -m "linux.conf.au, 2013" overview
+
+The 'make-index' script will create an index page based on index.html,
+and all current branches and tags in the repo and their README.rst
+files.
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..d14d6a8
--- /dev/null
+++ b/index.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+	<head>
+		<title>OpenStack Project Infrastructure Publications</title>
+		<!-- Google Fonts -->
+		<link
+			href="http://fonts.googleapis.com/css?family=PT+Sans&amp;subset=latin"
+			rel="stylesheet" type="text/css" />
+		<!-- Framework CSS -->
+		<link rel="stylesheet"
+			href="http://openstack.org/themes/openstack/css/blueprint/screen.css"
+			type="text/css" media="screen, projection" />
+		<link rel="stylesheet"
+			href="http://openstack.org/themes/openstack/css/blueprint/print.css"
+			type="text/css" media="print" />
+		<!--[if lt IE 8]><link rel="stylesheet" href="http://openstack.org/themes/openstack/css/blueprint/ie.css" type="text/css" media="screen, projection"><![endif]-->
+		<!-- OpenStack Specific CSS -->
+		<link rel="stylesheet"
+			href="http://openstack.org/themes/openstack/css/main.css"
+			type="text/css" media="screen, projection, print" />
+	</head>
+	<body>
+		<div class="container">
+			<div id="header">
+				<div class="span-5">
+					<h1 id="logo"><a href="/">OpenStack</a></h1>
+				</div>
+				<div class="span-19 last blueLine">
+					<div id="navigation" class="span-19">
+						<ul id="Menu1">
+							<li><a href="http://www.openstack.org/"
+								title="Go to the OpenStack Home page"
+								>Home</a></li>
+							<li><a
+								href="http://www.openstack.org/software/"
+								title="About OpenStack"
+								class="link">About</a></li>
+							<li><a
+								href="http://www.openstack.org/user-stories/"
+								title="Read stories about companies that use OpenStack to get work done."
+								class="link">User Stories</a></li>
+							<li><a
+								href="http://www.openstack.org/community/"
+								title="Go to the OpenStack Community page"
+								class="link">Community</a></li>
+							<li><a
+								href="http://www.openstack.org/profile/"
+								title="Edit your OpenStack community profile"
+								class="link">Profile</a></li>
+							<li><a
+								href="http://www.openstack.org/blog/"
+								title="Go to the OpenStack Blog"
+								>Blog</a></li>
+							<li><a href="http://wiki.openstack.org/"
+								title="Go to the OpenStack Wiki"
+								>Wiki</a></li>
+							<li><a
+								href="http://docs.openstack.org/glossary/content/glossary.html"
+								title="See definitions of OpenStack terms"
+								>Glossary</a></li>
+							<li><a href="http://docs.openstack.org/"
+								title="Go to the OpenStack Documentation"
+								class="current"
+								>Documentation</a></li>
+						</ul>
+					</div>
+				</div>
+			</div>
+		</div>
+		<!-- Page Content -->
+		<div class="container">
+		  <h1>OpenStack Project Infrastructure Publications</h3>
+		</div>
+		<div class="container">
+		  <h2>Current Publications</h2>
+		  {current}
+		</div>
+		<br/>
+		<div class="container">
+		  <h2>Previous Publications</h2>
+		  {previous}
+		</div>
+	</body>
+</html>
diff --git a/make-index b/make-index
new file mode 100755
index 0000000..5132396
--- /dev/null
+++ b/make-index
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+
+# Copyright 2013 OpenStack Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import os
+import subprocess
+
+def run_local(cmd, cwd='.', env={}):
+    print "Running:", cmd
+    newenv = os.environ
+    newenv.update(env)
+    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd=cwd,
+                         stderr=subprocess.STDOUT, env=newenv)
+    (out, nothing) = p.communicate()
+    return (p.returncode, out.strip())
+
+def git_branches():
+    branches = []
+    r, branch_list = run_local(['git', 'branch', '-a'])
+    for branch in branch_list.split("\n"):
+        branch = branch.strip()
+        if not branch.startswith('remotes/origin'):
+            continue
+        branches.append(branch)
+    return branches
+
+def git_tags():
+    r, tag_list = run_local(['git', 'tag', '-n'])
+    return tag_list.split('\n')
+
+current = ''
+previous = ''
+
+for branch in git_branches():
+    if branch.startswith('remotes/origin/master'):
+        continue
+    if branch.startswith('remotes/origin/HEAD'):
+        continue
+    if '->' in branch:
+        continue
+    r,o = run_local(['git', 'show', branch+':README.rst'])
+    if not r:
+        title = o.split('\n')[0]
+        name = branch[len('remotes/origin/'):]
+        print "Adding branch %s: %s" % (name, title)
+        current += '<a href="%s/">%s</a><br/>\n' % (name, title)
+
+
+for tagline in git_tags():
+    tag, tag_title = [x.strip() for x in tagline.split(' ', 1)]
+    r,o = run_local(['git', 'show', tag+':README.rst'])
+    if not r:
+        title = o.split('\n')[0]
+        print "Adding tag %s: %s: %s" % (tag, tag_title, title)
+        previous += '<a href="%s/">%s: %s</a><br/>\n' % (tag, tag_title, title)
+
+
+if not os.path.exists('output'):
+    os.mkdir('output')
+
+out = open('output/index.html', 'w')
+out.write(open('index.html').read().format(current=current, previous=previous))
+out.close()