Ross Light avatar Ross Light committed e8cc6bc

Rename GLaDOS to Black Forest for open source release

Comments (0)

Files changed (39)

-# GLaDOS
+# Black Forest
 
-GLaDOS is the _**G**iant **L**ibrary **a**nd **D**istributed **O**rganizing **S**ystem_.  Its
-purpose is to organize the vast amount of code I have created over the years.
+Black Forest is a project to organize the vast amount of code I have created over the years.
+Its goals are:
 
 * **Accessibility**: Access and modify code from any computer
 * **Code Reuse**: Search all code
 [GOPATH](http://golang.org/doc/code.html#GOPATH) set up.  Then, downloading and installing is as
 easy as:
 
-    go get bitbucket.org/zombiezen/glados
+    go get bitbucket.org/zombiezen/blackforest
 
 # License
 
 
 ## Go
 
-Portions of GLaDOS are copied from the Go standard library.
+Portions of Black Forest are copied from the Go standard library.
 
 Copyright (c) 2012 The Go Authors. All rights reserved.
 
 
 ## Bootstrap
 
-GLaDOS uses [Bootstrap](http://twitter.github.com/bootstrap/), which is released under the
+Black Forest uses [Bootstrap](http://twitter.github.com/bootstrap/), which is released under the
 [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0).
 
 Copyright 2012 Twitter, Inc.
 
 ## jQuery
 
-GLaDOS uses [jQuery](http://jquery.com/), which is released under an
+Black Forest uses [jQuery](http://jquery.com/), which is released under an
 [MIT license](http://jquery.org/license/).
 
 Copyright 2013 jQuery Foundation and other contributors

catalog/cache_test.go

 
 func newMockCatalog() mockCatalog {
 	return mockCatalog{
-		"glados": &Project{
+		"blackforest": &Project{
 			ID:          ID{0x6f, 0x5d, 0x5d, 0xcc, 0x6b, 0x38, 0x49, 0x08, 0x9d},
-			ShortName:   "glados",
-			Name:        "GLaDOS",
+			ShortName:   "blackforest",
+			Name:        "Black Forest",
 			Description: "Giant Library and Distributed Organizing System",
 			CatalogTime: magicTime,
 			CreateTime:  magicTime,
 	}
 
 	list, err := c.List()
-	if want := []string{"glados"}; !reflect.DeepEqual(list, want) {
+	if want := []string{"blackforest"}; !reflect.DeepEqual(list, want) {
 		t.Errorf("Cache.List() = %q; want %q", list, want)
 	}
 	if err != nil {
 	}
 
 	sn, err := c.ShortName(magicID)
-	if sn != "glados" {
-		t.Errorf("Cache.ShortName(%v) = %q; want %q", magicID, sn, "glados")
+	if sn != "blackforest" {
+		t.Errorf("Cache.ShortName(%v) = %q; want %q", magicID, sn, "blackforest")
 	}
 	if err != nil {
 		t.Errorf("Cache.ShortName(%v) error: %v", magicID, err)
 	}
 
-	p, err := c.GetProject("glados")
+	p, err := c.GetProject("blackforest")
 	want := &Project{
 		ID:          magicID,
-		ShortName:   "glados",
-		Name:        "GLaDOS",
+		ShortName:   "blackforest",
+		Name:        "Black Forest",
 		Description: "Giant Library and Distributed Organizing System",
 		CatalogTime: magicTime,
 		CreateTime:  magicTime,
 		Tags:        []string{"go", "http", "os", "tools"},
 	}
 	if !projectEqual(p, want) {
-		t.Errorf("Cache.GetProject(%q) = %v; want %v", "glados", p, want)
+		t.Errorf("Cache.GetProject(%q) = %v; want %v", "blackforest", p, want)
 	}
 	if err != nil {
-		t.Errorf("Cache.GetProject(%q) error: %v", "glados", err)
+		t.Errorf("Cache.GetProject(%q) error: %v", "blackforest", err)
 	}
 
 	if tags, want := newStringSet(c.Tags()), newStringSet([]string{"go", "http", "os", "tools"}); !reflect.DeepEqual(tags, want) {
 		t.Errorf("Cache.Tags() = %v; want %v", tags.Slice(), want.Slice())
 	}
-	if names := c.FindTag("go"); !reflect.DeepEqual(names, []string{"glados"}) {
-		t.Errorf("Cache.FindTag(%q) = %v; want %v", "go", names, []string{"glados"})
+	if names := c.FindTag("go"); !reflect.DeepEqual(names, []string{"blackforest"}) {
+		t.Errorf("Cache.FindTag(%q) = %v; want %v", "go", names, []string{"blackforest"})
 	}
 }
 
 
 	proj := &Project{
 		ID:          magicID,
-		ShortName:   "gladosa",
-		Name:        "GLaDOS",
+		ShortName:   "blackforesta",
+		Name:        "Black Forest",
 		Description: "Giant Library and Distributed Organizing System",
 		CatalogTime: magicTime,
 		CreateTime:  magicTime,
 		t.Errorf("Cache.PutProject(%v) error: %v", proj, err)
 	}
 
-	p, err := c.GetProject("gladosa")
+	p, err := c.GetProject("blackforesta")
 	// to ensure the pointer isn't modified
 	want := &Project{
 		ID:          magicID,
-		ShortName:   "gladosa",
-		Name:        "GLaDOS",
+		ShortName:   "blackforesta",
+		Name:        "Black Forest",
 		Description: "Giant Library and Distributed Organizing System",
 		CatalogTime: magicTime,
 		CreateTime:  magicTime,
 		Tags:        []string{"go", "web", "os", "tools"},
 	}
 	if !projectEqual(p, want) {
-		t.Errorf("Cache.GetProject(%q) = %v; want %v", "gladosa", p, want)
+		t.Errorf("Cache.GetProject(%q) = %v; want %v", "blackforesta", p, want)
 	}
 	if err != nil {
-		t.Errorf("Cache.GetProject(%q) error: %v", "gladosa", err)
+		t.Errorf("Cache.GetProject(%q) error: %v", "blackforesta", err)
 	}
-	if mcProj := mc["gladosa"]; !projectEqual(mcProj, want) {
-		t.Errorf("Cache.cat[%q] = %v; want %v", "gladosa", mcProj, want)
+	if mcProj := mc["blackforesta"]; !projectEqual(mcProj, want) {
+		t.Errorf("Cache.cat[%q] = %v; want %v", "blackforesta", mcProj, want)
 	}
-	if mcProj := mc["glados"]; mcProj != nil {
-		t.Errorf("Cache.cat[%q] = %v; want nil", "glados", mcProj)
+	if mcProj := mc["blackforest"]; mcProj != nil {
+		t.Errorf("Cache.cat[%q] = %v; want nil", "blackforest", mcProj)
 	}
 
-	p, err = c.GetProject("glados")
+	p, err = c.GetProject("blackforest")
 	if p != nil {
-		t.Errorf("Cache.GetProject(%q) = %v; want nil", "glados", p)
+		t.Errorf("Cache.GetProject(%q) = %v; want nil", "blackforest", p)
 	}
 	if err != nil {
-		t.Errorf("Cache.GetProject(%q) error: %v", "glados", err)
+		t.Errorf("Cache.GetProject(%q) error: %v", "blackforest", err)
 	}
 
 	sn, err := c.ShortName(magicID)
-	if sn != "gladosa" {
-		t.Errorf("Cache.ShortName(%v) = %q; want %q", magicID, sn, "gladosa")
+	if sn != "blackforesta" {
+		t.Errorf("Cache.ShortName(%v) = %q; want %q", magicID, sn, "blackforesta")
 	}
 	if err != nil {
 		t.Errorf("Cache.ShortName(%v) error: %v", magicID, err)
 	if tags, want := newStringSet(c.Tags()), newStringSet([]string{"go", "web", "os", "tools"}); !reflect.DeepEqual(tags, want) {
 		t.Errorf("Cache.Tags() = %v; want %v", tags.Slice(), want.Slice())
 	}
-	if names := c.FindTag("web"); !reflect.DeepEqual(names, []string{"gladosa"}) {
-		t.Errorf("Cache.FindTag(%q) = %v; want %v", "web", names, []string{"gladosa"})
+	if names := c.FindTag("web"); !reflect.DeepEqual(names, []string{"blackforesta"}) {
+		t.Errorf("Cache.FindTag(%q) = %v; want %v", "web", names, []string{"blackforesta"})
 	}
 	if names := c.FindTag("http"); len(names) != 0 {
 		t.Errorf("Cache.FindTag(%q) = %v; want %v", "http", names, []string{})
 
 func TestCache_RefreshProject(t *testing.T) {
 	const (
-		projShortName = "glados"
-		projInitName  = "GLaDOS"
+		projShortName = "blackforest"
+		projInitName  = "Black Forest"
 		projNewName   = "FOO"
 	)
 
 
 func TestCache_RefreshProject_Delete(t *testing.T) {
 	const (
-		projShortName = "glados"
-		projName      = "GLaDOS"
+		projShortName = "blackforest"
+		projName      = "Black Forest"
 	)
 
 	mc := newMockCatalog()
 
 func TestCache_RefreshProject_Rename(t *testing.T) {
 	const (
-		projShortName    = "glados"
-		projNewShortName = "glados2"
+		projShortName    = "blackforest"
+		projNewShortName = "blackforest2"
 
-		projInitName = "GLaDOS"
-		projNewName  = "GLaDOS 2"
+		projInitName = "Black Forest"
+		projNewName  = "Black Forest 2"
 	)
 
 	mc := newMockCatalog()
 
 func TestCache_RefreshProject_Fail(t *testing.T) {
 	const (
-		projShortName = "glados"
-		projName      = "GLaDOS"
+		projShortName = "blackforest"
+		projName      = "Black Forest"
 	)
 
 	mc := mockFailCatalog{mockCatalog: newMockCatalog()}

catalog/catalog.go

-// Package catalog provides access to GLaDOS catalogs.
+// Package catalog provides access to Black Forest catalogs.
 package catalog
 
 import (
 )
 
 // VersionError is returned when opening a catalog from an incompatible version
-// of GLaDOS.
+// of Black Forest.
 type VersionError int
 
 func (e VersionError) Error() string {
 package catalog
 
 import (
-	"bitbucket.org/zombiezen/glados/vcs"
+	"bitbucket.org/zombiezen/blackforest/vcs"
 	"io"
 	"os"
 	"path/filepath"

catalog/local_test.go

 	"testing"
 	"time"
 
-	"bitbucket.org/zombiezen/glados/vcs"
+	"bitbucket.org/zombiezen/blackforest/vcs"
 )
 
 var magicTime = time.Date(2013, 2, 7, 10, 51, 13, 0, time.FixedZone("PST", int(-8*time.Hour/time.Second)))
 
 const exampleProjectJSON = `{
 	"id": "b11dzGs4SQid",
-	"shortname": "glados",
-	"name": "GLaDOS",
+	"shortname": "blackforest",
+	"name": "Black Forest",
 	"description": "Giant Library and Distributed Organizing System",
 	"catalog_time": "2013-02-07T10:51:13-08:00",
 	"create_time": "2013-02-07T10:51:13-08:00",
 	fs.makeFile("foo"+sep+"version.json", `{"version": 1}`)
 	fs.makeFile("foo"+sep+"catalog.json", `{
 	"id_to_shortname": {
-		"b11dzGs4SQid": "glados"
+		"b11dzGs4SQid": "blackforest"
 	}
 }`)
 
 	fs.Mkdir("foo" + sep + "projects")
-	fs.makeFile("foo"+sep+"projects"+sep+"glados.json", exampleProjectJSON)
+	fs.makeFile("foo"+sep+"projects"+sep+"blackforest.json", exampleProjectJSON)
 
 	wc := &mockWC{
 		renamed: make(map[string]string),
 func TestLocalList(t *testing.T) {
 	cat, _, wc := newTestCatalog()
 	list, err := cat.List()
-	if want := []string{"glados"}; !reflect.DeepEqual(list, want) {
+	if want := []string{"blackforest"}; !reflect.DeepEqual(list, want) {
 		t.Errorf("cat.List() = %q; want %q", list, want)
 	}
 	if err != nil {
 	cat, _, wc := newTestCatalog()
 	id := ID{0x6f, 0x5d, 0x5d, 0xcc, 0x6b, 0x38, 0x49, 0x08, 0x9d}
 	sn, err := cat.ShortName(id)
-	if want := "glados"; sn != want {
+	if want := "blackforest"; sn != want {
 		t.Errorf("cat.ShortName(%v) = %q; want %q", id, sn, want)
 	}
 	if err != nil {
 
 func TestLocalGetProject(t *testing.T) {
 	cat, _, wc := newTestCatalog()
-	proj, err := cat.GetProject("glados")
+	proj, err := cat.GetProject("blackforest")
 	want := &Project{
 		ID:          ID{0x6f, 0x5d, 0x5d, 0xcc, 0x6b, 0x38, 0x49, 0x08, 0x9d},
-		ShortName:   "glados",
-		Name:        "GLaDOS",
+		ShortName:   "blackforest",
+		Name:        "Black Forest",
 		Description: "Giant Library and Distributed Organizing System",
 		CatalogTime: magicTime,
 		CreateTime:  magicTime,
 	cat, fs, wc := newTestCatalog()
 	proj := &Project{
 		ID:          id,
-		ShortName:   "glados",
+		ShortName:   "blackforest",
 		Name:        "Teh Foo",
 		Description: "A junk project",
 		Tags:        []string{"foo", "junk"},
 		FileName string
 		Content  string
 	}{
-		{"glados.json", `{"id":"b11dzGs4SQid","shortname":"glados","name":"Teh Foo","description":"A junk project","tags":["foo","junk"],"homepage":"http://example.com/","catalog_time":"2013-02-07T10:51:13-08:00","create_time":"2013-02-07T10:51:13-08:00"}` + "\n"},
+		{"blackforest.json", `{"id":"b11dzGs4SQid","shortname":"blackforest","name":"Teh Foo","description":"A junk project","tags":["foo","junk"],"homepage":"http://example.com/","catalog_time":"2013-02-07T10:51:13-08:00","create_time":"2013-02-07T10:51:13-08:00"}` + "\n"},
 	}
 	for _, fc := range fileChecks {
 		name := filepath.Join(root, "projects", fc.FileName)
 	}
 
 	sn, err := cat.ShortName(id)
-	if want := "glados"; sn != want {
+	if want := "blackforest"; sn != want {
 		t.Errorf("cat.ShortName(%v) = %q; want %q", id, sn, want)
 	}
 	if err != nil {
 		}
 	}
 
-	if _, ok := fs.files[filepath.Join(root, "projects", "glados.json")]; ok {
-		t.Error("glados.json still exists")
+	if _, ok := fs.files[filepath.Join(root, "projects", "blackforest.json")]; ok {
+		t.Error("blackforest.json still exists")
 	}
 
 	sn, err := cat.ShortName(id)
 	if want := []string{"projects/foo.json"}; !reflect.DeepEqual(wc.added, want) {
 		t.Errorf("vcs added = %v; want %v", wc.added, want)
 	}
-	if want := []string{"projects/glados.json"}; !reflect.DeepEqual(wc.removed, want) {
+	if want := []string{"projects/blackforest.json"}; !reflect.DeepEqual(wc.removed, want) {
 		t.Errorf("vcs removed = %v; want %v", wc.removed, want)
 	}
-	if want := map[string]string{"projects/glados.json": "projects/foo.json"}; !reflect.DeepEqual(wc.renamed, want) {
+	if want := map[string]string{"projects/blackforest.json": "projects/foo.json"}; !reflect.DeepEqual(wc.renamed, want) {
 		t.Errorf("vcs renamed = %v; want %v", wc.renamed, want)
 	}
 	if !wc.committed {
 	cat, fs, wc := newTestCatalog()
 	proj := &Project{
 		ID:          id,
-		ShortName:   "glados",
+		ShortName:   "blackforest",
 		Name:        "Teh Foo",
 		Description: "A junk project",
 		Tags:        []string{"foo", "junk"},
 		FileName string
 		Content  string
 	}{
-		{"glados.json", exampleProjectJSON},
+		{"blackforest.json", exampleProjectJSON},
 	}
 	for _, fc := range fileChecks {
 		name := filepath.Join(root, "projects", fc.FileName)
 	}
 
 	sn, err := cat.ShortName(ID{0x6f, 0x5d, 0x5d, 0xcc, 0x6b, 0x38, 0x49, 0x08, 0x9d})
-	if want := "glados"; sn != want {
+	if want := "blackforest"; sn != want {
 		t.Errorf("cat.ShortName(%v) = %q; want %q", id, sn, want)
 	}
 	if err != nil {

catalog/search/search.go

-// Package search provides text search in GLaDOS catalogs.
+// Package search provides text search in Black Forest catalogs.
 package search
 
 import (
 	"sort"
 
-	"bitbucket.org/zombiezen/glados/catalog"
+	"bitbucket.org/zombiezen/blackforest/catalog"
 )
 
 // A Searcher implements a textual search.
 	return ts, nil
 }
 
-// Search parses a query according to the grammar at https://bitbucket.org/zombiezen/glados/wiki/Search
-// and then finds all matching projects, sorted by decreasing relevance.
+// Search parses a query according to the grammar at
+// https://bitbucket.org/zombiezen/blackforest/wiki/Search and then finds all
+// matching projects, sorted by decreasing relevance.
 func (ts *textSearch) Search(q string) ([]Result, error) {
 	query, err := parseQuery(q)
 	if err != nil {

catalog/search/search_test.go

 	"strconv"
 	"testing"
 
-	"bitbucket.org/zombiezen/glados/catalog"
+	"bitbucket.org/zombiezen/blackforest/catalog"
 )
 
 func TestTextSearch(t *testing.T) {
 	"strings"
 	"time"
 
-	"bitbucket.org/zombiezen/glados/catalog"
-	"bitbucket.org/zombiezen/glados/catalog/search"
+	"bitbucket.org/zombiezen/blackforest/catalog"
+	"bitbucket.org/zombiezen/blackforest/catalog/search"
 	"bitbucket.org/zombiezen/subcmd"
 )
 
 var commandSet = subcmd.Set{
-	Name:        "glados",
+	Name:        "blackforest",
 	GlobalFlags: globalFlags,
 	Commands: []subcmd.Command{
 		{
 
 // runEditor opens the user's editor populated with text and returns the modified text.
 func runEditor(text string) (string, error) {
-	const tempFilePrefix = "glados-editor-"
+	const tempFilePrefix = "blackforest-editor-"
 
 	f, err := ioutil.TempFile("", tempFilePrefix)
 	if err != nil {
 	"strconv"
 	"time"
 
-	"bitbucket.org/zombiezen/glados/catalog"
+	"bitbucket.org/zombiezen/blackforest/catalog"
 	"github.com/zombiezen/schema"
 )
 
-// The glados command provides a front-end for a GLaDOS catalog.
+// The blackforest command provides a front-end for a Black Forest catalog.
 package main
 
 import (
 	"os"
 	"strings"
 
-	"bitbucket.org/zombiezen/glados/catalog"
-	"bitbucket.org/zombiezen/glados/vcs"
+	"bitbucket.org/zombiezen/blackforest/catalog"
+	"bitbucket.org/zombiezen/blackforest/vcs"
 	"bitbucket.org/zombiezen/subcmd"
 )
 
 // Environment variable names
 const (
-	CatalogPathEnv = "GLADOS_PATH"
-	HostEnv        = "GLADOS_HOST"
-	EditorEnv      = "GLADOS_EDITOR"
+	CatalogPathEnv = "BLACKFOREST_PATH"
+	HostEnv        = "BLACKFOREST_HOST"
+	EditorEnv      = "BLACKFOREST_EDITOR"
 
 	globalEditorEnv = "EDITOR"
 )
 package main
 
 import (
-	"bitbucket.org/zombiezen/glados/vcs"
+	"bitbucket.org/zombiezen/blackforest/vcs"
 	"testing"
 )
 

misc/blackforest-hg-import.bash

+#!/bin/bash
+
+abspath () { case "$1" in /*)printf "%s\n" "$1";; *)printf "%s\n" "$PWD/$1";; esac; }
+
+root="$(abspath $1)"
+shift
+created="$(hg -R "$root" log -r0 --template='{date|rfc3339date}\n')"
+vcsurl="$(hg -R "$root" paths default | sed 's|^bb://|https://bitbucket.org/|')"
+
+blackforest create -created="$created" -path="$root" -vcs=hg -vcsurl="$vcsurl" "$@"
+exit $?

misc/blackforest-missing.bash

+#!/bin/bash
+
+for name in $(blackforest ls)
+do
+    blackforest path "$name" > /dev/null
+    if [ $? -ne 0 ]
+    then
+        echo "$name"
+    fi
+done

misc/blackforest.vim

+" Vim plugin for Black Forest
+" Maintainer: Ross Light <ross@zombiezen.com>
+" License: Copyright (c) 2013, Ross Light. All rights reserved.
+"
+" Redistribution and use in source and binary forms, with or without modification,
+" are permitted provided that the following conditions are met:
+"
+" Redistributions of source code must retain the above copyright notice, this list
+" of conditions and the following disclaimer.
+"
+" Redistributions in binary form must reproduce the above copyright notice, this
+" list of conditions and the following disclaimer in the documentation and/or
+" other materials provided with the distribution.
+"
+" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+" ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function! BlackForestPath(project)
+  return substitute(system("blackforest path ".shellescape(a:project)), '[\r\n]\+$', '', '')
+endfunction
+
+function! s:CompleteBcd(ArgLead, CmdLine, CursorPos)
+  return system("blackforest ls")
+endfunction
+
+command! -bar -nargs=1 -complete=custom,s:CompleteBcd Bcd exec 'cd '.escape(BlackForestPath(<f-args>), ' \')
+
+" vim: ft=vim et ts=8 sts=2 sw=2 tw=80

misc/completion.zsh

 #
 # Heavily inspired by go's zsh completion
 
-__glados_complete() {
+__blackforest_complete() {
     typeset -a commands globalflags
     commands+=(
         'init[create a catalog]'
         ':command:'
     )
     if (( CURRENT == 2 )); then
-        # explain glados commands
-        _values 'glados commands' ${commands[@]}
+        # explain blackforest commands
+        _values 'blackforest commands' ${commands[@]}
         return
     fi
-    __glados_list() {
+    __blackforest_list() {
         local expl projects
         declare -a projects
-        projects=($(glados list 2>/dev/null))
+        projects=($(blackforest list 2>/dev/null))
         _wanted projects expl 'projects' compadd "$@" - "${projects[@]}"
     }
-    __glados_vcs() {
-        _values 'glados VCS' 'cvs' 'svn' 'git' 'hg' 'bzr' 'darcs'
+    __blackforest_vcs() {
+        _values 'blackforest VCS' 'cvs' 'svn' 'git' 'hg' 'bzr' 'darcs'
         return
     }
     case ${words[2]} in
             ${globalflags[@]} \
             '-json[print project as JSON]' \
             '-rfc3339[print dates as RFC3339]' \
-            '*:projects:__glados_list'
+            '*:projects:__blackforest_list'
         ;;
     path|describe|desc)
-        _arguments : ${globalflags[@]} ':projects:__glados_list'
+        _arguments : ${globalflags[@]} ':projects:__blackforest_list'
         ;;
     delete|del|rm)
-        _arguments : ${globalflags[@]} '*:projects:__glados_list'
+        _arguments : ${globalflags[@]} '*:projects:__blackforest_list'
         ;;
     create)
         _arguments : ${globalflags[@]} \
             '-shortname=[identifier for project]' \
             '-tags=[comma-separated tags to assign to the new project]' \
             '-url=[project homepage]' \
-            '-vcs=[type of VCS for project]:vcs:__glados_vcs' \
+            '-vcs=[type of VCS for project]:vcs:__blackforest_vcs' \
             '-vcsurl=[project VCS URL]'
         ;;
     update|up)
             '-path=[path of working copy]:file:_files' \
             "-tags=[set the project's tags, separated by commas]" \
             '-url=[project homepage]' \
-            '-vcs=[type of VCS for project]:vcs:__glados_vcs' \
+            '-vcs=[type of VCS for project]:vcs:__blackforest_vcs' \
             '-vcsurl=[project VCS URL]' \
-            ':projects:__glados_list'
+            ':projects:__blackforest_list'
         ;;
     rename|mv)
-        _arguments : ${globalflags[@]} ':projects:__glados_list'
+        _arguments : ${globalflags[@]} ':projects:__blackforest_list'
         ;;
     describe|desc)
-        _arguments : ${globalflags[@]} ':projects:__glados_list'
+        _arguments : ${globalflags[@]} ':projects:__blackforest_list'
         ;;
     import)
         _arguments : ${globalflags[@]} '*:file:_files'
         ;;
     checkout|co)
         _arguments : ${globalflags[@]} \
-            ':project:__glados_list' \
+            ':project:__blackforest_list' \
             ':file:_path_files -/'
         ;;
     web)
     esac
 }
 
-compdef __glados_complete glados
+compdef __blackforest_complete blackforest

misc/glados-hg-import.bash

-#!/bin/bash
-
-abspath () { case "$1" in /*)printf "%s\n" "$1";; *)printf "%s\n" "$PWD/$1";; esac; }
-
-root="$(abspath $1)"
-shift
-created="$(hg -R "$root" log -r0 --template='{date|rfc3339date}\n')"
-vcsurl="$(hg -R "$root" paths default | sed 's|^bb://|https://bitbucket.org/|')"
-
-glados create -created="$created" -path="$root" -vcs=hg -vcsurl="$vcsurl" "$@"
-exit $?

misc/glados-missing.bash

-#!/bin/bash
-
-for name in $(glados ls)
-do
-    glados path "$name" > /dev/null
-    if [ $? -ne 0 ]
-    then
-        echo "$name"
-    fi
-done

misc/glados.vim

-" Vim plugin for GLaDOS
-" Maintainer: Ross Light <ross@zombiezen.com>
-" License: Copyright (c) 2013, Ross Light. All rights reserved.
-"
-" Redistribution and use in source and binary forms, with or without modification,
-" are permitted provided that the following conditions are met:
-"
-" Redistributions of source code must retain the above copyright notice, this list
-" of conditions and the following disclaimer.
-"
-" Redistributions in binary form must reproduce the above copyright notice, this
-" list of conditions and the following disclaimer in the documentation and/or
-" other materials provided with the distribution.
-"
-" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-" ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-function! GladosPath(project)
-  return substitute(system("glados path ".shellescape(a:project)), '[\r\n]\+$', '', '')
-endfunction
-
-function! s:CompleteGcd(ArgLead, CmdLine, CursorPos)
-  return system("glados ls")
-endfunction
-
-command! -bar -nargs=1 -complete=custom,s:CompleteGcd Gcd exec 'cd '.escape(GladosPath(<f-args>), ' \')
-
-" vim: ft=vim et ts=8 sts=2 sw=2 tw=80

misc/jsonmerge/jsonmerge.go

 // The jsonmerge command performs an ancestor merge on a JSON object.
 //
-// https://bitbucket.org/zombiezen/glados/wiki/JSON%20Merge.md
+// https://bitbucket.org/zombiezen/blackforest/wiki/JSON%20Merge.md
 package main
 
 import (

misc/ross-aliases.zsh

 #!/bin/zsh
 
-alias G=glados
+alias B=blackforest
 
-Gcd() {
+Bcd() {
     local projpath
-    projpath="$(glados path "$1")"
+    projpath="$(blackforest path "$1")"
     if [ $? -ne 0 ]; then
-        echo "Gcd: no path" 1>&2
+        echo "Bcd: no path" 1>&2
         return 1
     fi
     if [[ -d "$projpath" ]]; then
         cd "${projpath:h}"
         return $?
     else
-        echo "Gcd: \"$projpath\" does not exist" 1>&2
+        echo "Bcd: \"$projpath\" does not exist" 1>&2
         return 1
     fi
 }
-compdef '_values "glados projects" $(glados list 2>/dev/null)' Gcd
+compdef '_values "blackforest projects" $(blackforest list 2>/dev/null)' Bcd
 
-Ginfo() {
+Binfo() {
     local word="$1"
     shift
-    glados show "$@" | sed -n 's/^'"$word"':\s*//p'
+    blackforest show "$@" | sed -n 's/^'"$word"':\s*//p'
 }
 
-GPUSH() {
-    hg push -R "$GLADOS_PATH" "$@"
+BPUSH() {
+    hg push -R "$BLACKFOREST_PATH" "$@"
 }
 
-GPULL() {
-    hg pull -R "$GLADOS_PATH" -u "$@"
+BPULL() {
+    hg pull -R "$BLACKFOREST_PATH" -u "$@"
 }

misc/vagrant/puppet/manifests/default.pp

-include glados
+include blackforest

misc/vagrant/puppet/modules/glados/manifests/init.pp

-class glados {
-    $importpath = "bitbucket.org/zombiezen/glados"
-    $go_url = "http://go.googlecode.com/files/go1.0.3.linux-386.tar.gz"
-    $user = "vagrant"
-    $gopath = "/home/$user/go"
-    $catalog = "/srv/glados-catalog"
-
-    group { $user:
-        ensure => present,
-    }
-
-    user { $user:
-        ensure => present,
-        gid => $user,
-    }
-
-    File {
-        owner => $user,
-        group => $user,
-    }
-
-    Exec {
-        user => $user,
-    }
-
-    package { ["git-core", "mercurial", "wget"]:
-        ensure => installed,
-    }
-
-    exec { "fetch-go":
-        require => Package["wget"],
-        command => "/usr/bin/wget -q -O - $go_url | /bin/tar xz -C /usr/local",
-        creates => "/usr/local/go/bin/go",
-        user => "root",
-    }
-
-    file {
-        ["$gopath",
-         "$gopath/src",
-         "$gopath/src/bitbucket.org",
-         "$gopath/src/bitbucket.org/zombiezen"]:
-            ensure => directory;
-
-        "$gopath/src/$importpath":
-            ensure => link,
-            target => "/vagrant";
-    }
-
-    file { "/tmp/glados-deps.bash":
-        ensure => file,
-        content => template("glados/glados-deps.bash"),
-        owner => "root",
-        group => "root",
-        mode => 755,
-    }
-
-    exec { "glados-deps":
-        require => [
-            Exec["fetch-go"],
-            Package["git-core"],
-            Package["mercurial"],
-            File["/tmp/glados-deps.bash"],
-            File["$gopath/src/$importpath"],
-        ],
-        command => "/tmp/glados-deps.bash",
-        environment => "GOPATH=$gopath",
-    }
-
-    file { "/home/$user/glados-reload":
-        ensure => file,
-        content => template("glados/glados-reload.bash"),
-        mode => 755,
-    }
-
-    exec { "glados-install":
-        require => Exec["glados-deps"],
-        command => "/usr/local/go/bin/go install $importpath",
-        environment => "GOPATH=$gopath",
-        creates => "$gopath/bin/glados",
-    }
-
-    file { "/etc/init/glados.conf":
-        mode => 600,
-        owner => "root",
-        group => "root",
-        content => template("glados/glados.conf"),
-    }
-
-    exec { "glados-init":
-        require => Exec["glados-install"],
-        command => "$gopath/bin/glados init -catalog=\"$catalog\"",
-        creates => $catalog,
-        user => "root",
-    }
-
-    service { "glados":
-        require => [File["/etc/init/glados.conf"], Exec["glados-init"]],
-        ensure => running,
-    }
-}

misc/vagrant/puppet/modules/glados/templates/glados-deps.bash

-#!/bin/bash
-
-GO=/usr/local/go/bin/go
-format='{{range .Deps}}{{.}}'$'\n''{{end}}'
-deps="$($GO list -f "$format" <%=importpath%> | sed -rn '\:^bitbucket\.org/zombiezen/glados($|/):!p')"
-$GO get -u $deps

misc/vagrant/puppet/modules/glados/templates/glados-reload.bash

-#!/bin/bash
-
-die() {
-    echo "$@" 1>&2
-    exit 1
-}
-
-if [ "$(whoami)" != root ]
-then
-    die "must be run as root"
-fi
-
-GO=/usr/local/go/bin/go
-
-initctl stop glados || die "** can't stop service"
-sudo -u <%=user%> GOPATH='<%=gopath%>' $GO install <%=importpath%> || die "** build failed"
-initctl start glados || die "** can't restart service"

misc/vagrant/puppet/modules/glados/templates/glados.conf

-description "GLaDOS web"
-
-stop on runlevel [!2345]
-start on runlevel [3]
-
-respawn
-
-script
-    <%=gopath%>/bin/glados web -listen=:10710 \
-        -catalog="<%=catalog%>" \
-        -staticdir="<%=gopath%>/src/<%=importpath%>/static" \
-        -templatedir="<%=gopath%>/src/<%=importpath%>/templates"
-end script

misc/vagrant/puppet/modules/puppet/manifests/init.pp

+class blackforest {
+    $importpath = "bitbucket.org/zombiezen/blackforest"
+    $go_url = "http://go.googlecode.com/files/go1.0.3.linux-386.tar.gz"
+    $user = "vagrant"
+    $gopath = "/home/$user/go"
+    $catalog = "/srv/blackforest-catalog"
+
+    group { $user:
+        ensure => present,
+    }
+
+    user { $user:
+        ensure => present,
+        gid => $user,
+    }
+
+    File {
+        owner => $user,
+        group => $user,
+    }
+
+    Exec {
+        user => $user,
+    }
+
+    package { ["git-core", "mercurial", "wget"]:
+        ensure => installed,
+    }
+
+    exec { "fetch-go":
+        require => Package["wget"],
+        command => "/usr/bin/wget -q -O - $go_url | /bin/tar xz -C /usr/local",
+        creates => "/usr/local/go/bin/go",
+        user => "root",
+    }
+
+    file {
+        ["$gopath",
+         "$gopath/src",
+         "$gopath/src/bitbucket.org",
+         "$gopath/src/bitbucket.org/zombiezen"]:
+            ensure => directory;
+
+        "$gopath/src/$importpath":
+            ensure => link,
+            target => "/vagrant";
+    }
+
+    file { "/tmp/blackforest-deps.bash":
+        ensure => file,
+        content => template("blackforest/blackforest-deps.bash"),
+        owner => "root",
+        group => "root",
+        mode => 755,
+    }
+
+    exec { "blackforest-deps":
+        require => [
+            Exec["fetch-go"],
+            Package["git-core"],
+            Package["mercurial"],
+            File["/tmp/blackforest-deps.bash"],
+            File["$gopath/src/$importpath"],
+        ],
+        command => "/tmp/blackforest-deps.bash",
+        environment => "GOPATH=$gopath",
+    }
+
+    file { "/home/$user/blackforest-reload":
+        ensure => file,
+        content => template("blackforest/blackforest-reload.bash"),
+        mode => 755,
+    }
+
+    exec { "blackforest-install":
+        require => Exec["blackforest-deps"],
+        command => "/usr/local/go/bin/go install $importpath",
+        environment => "GOPATH=$gopath",
+        creates => "$gopath/bin/blackforest",
+    }
+
+    file { "/etc/init/blackforest.conf":
+        mode => 600,
+        owner => "root",
+        group => "root",
+        content => template("blackforest/blackforest.conf"),
+    }
+
+    exec { "blackforest-init":
+        require => Exec["blackforest-install"],
+        command => "$gopath/bin/blackforest init -catalog=\"$catalog\"",
+        creates => $catalog,
+        user => "root",
+    }
+
+    service { "blackforest":
+        require => [File["/etc/init/blackforest.conf"], Exec["blackforest-init"]],
+        ensure => running,
+    }
+}

misc/vagrant/puppet/modules/puppet/templates/blackforest-deps.bash

+#!/bin/bash
+
+GO=/usr/local/go/bin/go
+format='{{range .Deps}}{{.}}'$'\n''{{end}}'
+deps="$($GO list -f "$format" <%=importpath%> | sed -rn '\:^bitbucket\.org/zombiezen/blackforest($|/):!p')"
+$GO get -u $deps

misc/vagrant/puppet/modules/puppet/templates/blackforest-reload.bash

+#!/bin/bash
+
+die() {
+    echo "$@" 1>&2
+    exit 1
+}
+
+if [ "$(whoami)" != root ]
+then
+    die "must be run as root"
+fi
+
+GO=/usr/local/go/bin/go
+
+initctl stop blackforest || die "** can't stop service"
+sudo -u <%=user%> GOPATH='<%=gopath%>' $GO install <%=importpath%> || die "** build failed"
+initctl start blackforest || die "** can't restart service"

misc/vagrant/puppet/modules/puppet/templates/blackforest.conf

+description "Black Forest web"
+
+stop on runlevel [!2345]
+start on runlevel [3]
+
+respawn
+
+script
+    <%=gopath%>/bin/blackforest web -listen=:10710 \
+        -catalog="<%=catalog%>" \
+        -staticdir="<%=gopath%>/src/<%=importpath%>/static" \
+        -templatedir="<%=gopath%>/src/<%=importpath%>/templates"
+end script

templates/index.html

 <!DOCTYPE html>
 <html>
 <head>
-    <title>GLaDOS</title>
+    <title>Black Forest</title>
 {{template "head.html"}}
 </head>
 <body>
 {{template "nav-projects.html"}}
     <div class="container">
-        <h1>GLaDOS</h1>
+        <h1>Black Forest</h1>
         <ul class="nav nav-tabs">
             <li class="active"><a href="#list" data-toggle="tab">Projects</a></li>
             <li><a href="#create" data-toggle="tab">Create</a></li>

templates/nav-projects.html

     <div class="navbar navbar-fixed-top">
         <div class="navbar-inner">
-            <a class="brand" href="{{path "index"}}">GLaDOS</a>
+            <a class="brand" href="{{path "index"}}">Black Forest</a>
             <ul class="nav">
                 <li class="active"><a href="{{path "index"}}">Projects</a></li>
                 <li><a href="{{path "tagindex"}}">Tags</a></li>

templates/nav-tags.html

     <div class="navbar navbar-fixed-top">
         <div class="navbar-inner">
-            <a class="brand" href="{{path "index"}}">GLaDOS</a>
+            <a class="brand" href="{{path "index"}}">Black Forest</a>
             <ul class="nav">
                 <li><a href="{{path "index"}}">Projects</a></li>
                 <li class="active"><a href="{{path "tagindex"}}">Tags</a></li>

templates/project.html

 <!DOCTYPE html>
 <html>
 <head>
-    <title>GLaDOS</title>
+    <title>Black Forest</title>
 {{template "head.html"}}
 </head>
 <body>

templates/tag-index.html

 <!DOCTYPE html>
 <html>
 <head>
-    <title>GLaDOS Tags</title>
+    <title>Black Forest Tags</title>
 {{template "head.html"}}
 </head>
 <body>

templates/tag.html

 <!DOCTYPE html>
 <html>
 <head>
-    <title>GLaDOS Tags</title>
+    <title>Black Forest Tags</title>
 {{template "head.html"}}
 </head>
 <body>
 	"strings"
 	"time"
 
-	"bitbucket.org/zombiezen/glados/catalog"
+	"bitbucket.org/zombiezen/blackforest/catalog"
 	"bitbucket.org/zombiezen/subcmd"
 	"github.com/zombiezen/schema"
 )
 	"testing"
 	"time"
 
-	"bitbucket.org/zombiezen/glados/catalog"
+	"bitbucket.org/zombiezen/blackforest/catalog"
 )
 
 func TestProjectFormConstants(t *testing.T) {
 	"sync"
 	"time"
 
-	"bitbucket.org/zombiezen/glados/catalog"
-	"bitbucket.org/zombiezen/glados/catalog/search"
+	"bitbucket.org/zombiezen/blackforest/catalog"
+	"bitbucket.org/zombiezen/blackforest/catalog/search"
 	"bitbucket.org/zombiezen/subcmd"
 	"bitbucket.org/zombiezen/webapp"
 	"github.com/gorilla/mux"
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.