From 00e3df94c7e06ab66fe4618d3252458163e4a404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Thu, 12 Sep 2013 10:40:57 +0200 Subject: [PATCH 1/2] Camel-case constants Make the names look more like what you'd expect from Go. --- checkout.go | 32 ++++++++++++++++---------------- object.go | 30 +++++++++++++++--------------- object_test.go | 14 +++++++++----- reference.go | 6 +++--- reference_test.go | 8 ++++---- repository.go | 8 ++++---- walk.go | 8 ++++---- 7 files changed, 55 insertions(+), 51 deletions(-) diff --git a/checkout.go b/checkout.go index bbeb240..92ced9e 100644 --- a/checkout.go +++ b/checkout.go @@ -16,22 +16,22 @@ import ( type CheckoutStrategy uint const ( - CHECKOUT_NONE CheckoutStrategy = C.GIT_CHECKOUT_NONE // Dry run, no actual updates - CHECKOUT_SAFE = C.GIT_CHECKOUT_SAFE // Allow safe updates that cannot overwrite uncommitted data - CHECKOUT_SAFE_CREATE = C.GIT_CHECKOUT_SAFE_CREATE // Allow safe updates plus creation of missing files - CHECKOUT_FORCE = C.GIT_CHECKOUT_FORCE // Allow all updates to force working directory to look like index - CHECKOUT_ALLOW_CONFLICTS = C.GIT_CHECKOUT_ALLOW_CONFLICTS // Allow checkout to make safe updates even if conflicts are found - CHECKOUT_REMOVE_UNTRACKED = C.GIT_CHECKOUT_REMOVE_UNTRACKED // Remove untracked files not in index (that are not ignored) - CHECKOUT_REMOVE_IGNORED = C.GIT_CHECKOUT_REMOVE_IGNORED // Remove ignored files not in index - CHECKOUT_UPDATE_ONLY = C.GIT_CHECKOUT_UPDATE_ONLY // Only update existing files, don't create new ones - CHECKOUT_DONT_UPDATE_INDEX = C.GIT_CHECKOUT_DONT_UPDATE_INDEX // Normally checkout updates index entries as it goes; this stops that - CHECKOUT_NO_REFRESH = C.GIT_CHECKOUT_NO_REFRESH // Don't refresh index/config/etc before doing checkout - CHECKOUT_DISABLE_PATHSPEC_MATCH = C.GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH // Treat pathspec as simple list of exact match file paths - CHECKOUT_SKIP_UNMERGED = C.GIT_CHECKOUT_SKIP_UNMERGED // Allow checkout to skip unmerged files (NOT IMPLEMENTED) - CHECKOUT_USE_OURS = C.GIT_CHECKOUT_USE_OURS // For unmerged files, checkout stage 2 from index (NOT IMPLEMENTED) - CHECKOUT_USE_THEIRS = C.GIT_CHECKOUT_USE_THEIRS // For unmerged files, checkout stage 3 from index (NOT IMPLEMENTED) - CHECKOUT_UPDATE_SUBMODULES = C.GIT_CHECKOUT_UPDATE_SUBMODULES // Recursively checkout submodules with same options (NOT IMPLEMENTED) - CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED = C.GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED // Recursively checkout submodules if HEAD moved in super repo (NOT IMPLEMENTED) + CheckoutNone CheckoutStrategy = C.GIT_CHECKOUT_NONE // Dry run, no actual updates + CheckoutSafe = C.GIT_CHECKOUT_SAFE // Allow safe updates that cannot overwrite uncommitted data + CheckoutSafeCreate = C.GIT_CHECKOUT_SAFE_CREATE // Allow safe updates plus creation of missing files + CheckoutForce = C.GIT_CHECKOUT_FORCE // Allow all updates to force working directory to look like index + CheckoutAllowConflicts = C.GIT_CHECKOUT_ALLOW_CONFLICTS // Allow checkout to make safe updates even if conflicts are found + CheckoutRemoveUntracked = C.GIT_CHECKOUT_REMOVE_UNTRACKED // Remove untracked files not in index (that are not ignored) + CheckoutRemoveIgnored = C.GIT_CHECKOUT_REMOVE_IGNORED // Remove ignored files not in index + CheckotUpdateOnly = C.GIT_CHECKOUT_UPDATE_ONLY // Only update existing files, don't create new ones + CheckoutDontUpdateIndex = C.GIT_CHECKOUT_DONT_UPDATE_INDEX // Normally checkout updates index entries as it goes; this stops that + CheckoutNoRefresh = C.GIT_CHECKOUT_NO_REFRESH // Don't refresh index/config/etc before doing checkout + CheckooutDisablePathspecMatch = C.GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH // Treat pathspec as simple list of exact match file paths + CheckoutSkipUnmerged = C.GIT_CHECKOUT_SKIP_UNMERGED // Allow checkout to skip unmerged files (NOT IMPLEMENTED) + CheckoutUserOurs = C.GIT_CHECKOUT_USE_OURS // For unmerged files, checkout stage 2 from index (NOT IMPLEMENTED) + CheckoutUseTheirs = C.GIT_CHECKOUT_USE_THEIRS // For unmerged files, checkout stage 3 from index (NOT IMPLEMENTED) + CheckoutUpdateSubmodules = C.GIT_CHECKOUT_UPDATE_SUBMODULES // Recursively checkout submodules with same options (NOT IMPLEMENTED) + CheckoutUpdateSubmodulesIfChanged = C.GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED // Recursively checkout submodules if HEAD moved in super repo (NOT IMPLEMENTED) ) type CheckoutOpts struct { diff --git a/object.go b/object.go index 98a84a4..7b141aa 100644 --- a/object.go +++ b/object.go @@ -11,12 +11,12 @@ import "runtime" type ObjectType int const ( - OBJ_ANY ObjectType = C.GIT_OBJ_ANY - OBJ_BAD ObjectType = C.GIT_OBJ_BAD - OBJ_COMMIT ObjectType = C.GIT_OBJ_COMMIT - OBJ_TREE ObjectType = C.GIT_OBJ_TREE - OBJ_BLOB ObjectType = C.GIT_OBJ_BLOB - OBJ_TAG ObjectType = C.GIT_OBJ_TAG + ObjectAny ObjectType = C.GIT_OBJ_ANY + ObjectBad = C.GIT_OBJ_BAD + ObjectCommit = C.GIT_OBJ_COMMIT + ObjectTree = C.GIT_OBJ_TREE + ObjectBlob = C.GIT_OBJ_BLOB + ObjectTag = C.GIT_OBJ_TAG ) type Object interface { @@ -31,17 +31,17 @@ type gitObject struct { func (t ObjectType) String() (string) { switch (t) { - case OBJ_ANY: + case ObjectAny: return "Any" - case OBJ_BAD: + case ObjectBad: return "Bad" - case OBJ_COMMIT: + case ObjectCommit: return "Commit" - case OBJ_TREE: + case ObjectTree: return "Tree" - case OBJ_BLOB: + case ObjectBlob: return "Blob" - case OBJ_TAG: + case ObjectTag: return "tag" } // Never reached @@ -64,17 +64,17 @@ func (o *gitObject) Free() { func allocObject(cobj *C.git_object) Object { switch ObjectType(C.git_object_type(cobj)) { - case OBJ_COMMIT: + case ObjectCommit: commit := &Commit{gitObject{cobj}} runtime.SetFinalizer(commit, (*Commit).Free) return commit - case OBJ_TREE: + case ObjectTree: tree := &Tree{gitObject{cobj}} runtime.SetFinalizer(tree, (*Tree).Free) return tree - case OBJ_BLOB: + case ObjectBlob: blob := &Blob{gitObject{cobj}} runtime.SetFinalizer(blob, (*Blob).Free) return blob diff --git a/object_test.go b/object_test.go index 41efecf..85daf78 100644 --- a/object_test.go +++ b/object_test.go @@ -16,15 +16,19 @@ func TestObjectPoymorphism(t *testing.T) { checkFatal(t, err) obj = commit - if obj.Type() != OBJ_COMMIT { + if obj.Type() != ObjectCommit { t.Fatalf("Wrong object type, expected commit, have %v", obj.Type()) } + commitTree, err := commit.Tree() + checkFatal(t, err) + commitTree.EntryCount() + tree, err := repo.LookupTree(treeId) checkFatal(t, err) obj = tree - if obj.Type() != OBJ_TREE { + if obj.Type() != ObjectTree { t.Fatalf("Wrong object type, expected tree, have %v", obj.Type()) } @@ -55,19 +59,19 @@ func TestObjectPoymorphism(t *testing.T) { t.Fatalf("Lookup creates the wrong type") } - if obj.Type() != OBJ_TREE { + if obj.Type() != ObjectTree { t.Fatalf("Type() doesn't agree with dynamic type") } obj, err = repo.RevparseSingle("HEAD") checkFatal(t, err) - if obj.Type() != OBJ_COMMIT || obj.Id().String() != commit.Id().String() { + if obj.Type() != ObjectCommit || obj.Id().String() != commit.Id().String() { t.Fatalf("Failed to parse the right revision") } obj, err = repo.RevparseSingle("HEAD^{tree}") checkFatal(t, err) - if obj.Type() != OBJ_TREE || obj.Id().String() != tree.Id().String() { + if obj.Type() != ObjectTree || obj.Id().String() != tree.Id().String() { t.Fatalf("Failed to parse the right revision") } } diff --git a/reference.go b/reference.go index 5aee276..fae676f 100644 --- a/reference.go +++ b/reference.go @@ -11,9 +11,9 @@ import ( "unsafe" ) -var ( - SYMBOLIC = C.GIT_REF_SYMBOLIC - OID = C.GIT_REF_OID +const ( + ReferenceSymbolic = C.GIT_REF_SYMBOLIC + ReferenceOid = C.GIT_REF_OID ) type Reference struct { diff --git a/reference_test.go b/reference_test.go index 77afaeb..36387ee 100644 --- a/reference_test.go +++ b/reference_test.go @@ -19,11 +19,11 @@ func TestRefModification(t *testing.T) { tag, err := repo.LookupReference("refs/tags/tree") checkFatal(t, err) - checkRefType(t, tag, OID) + checkRefType(t, tag, ReferenceOid) ref, err := repo.LookupReference("HEAD") checkFatal(t, err) - checkRefType(t, ref, SYMBOLIC) + checkRefType(t, ref, ReferenceSymbolic) if target := ref.Target(); target != nil { t.Fatalf("Expected nil *Oid, got %v", target) @@ -31,7 +31,7 @@ func TestRefModification(t *testing.T) { ref, err = ref.Resolve() checkFatal(t, err) - checkRefType(t, ref, OID) + checkRefType(t, ref, ReferenceOid) if target := ref.Target(); target == nil { t.Fatalf("Expected valid target got nil") @@ -49,7 +49,7 @@ func TestRefModification(t *testing.T) { checkFatal(t, err) tag, err = repo.LookupReference("refs/tags/renamed") checkFatal(t, err) - checkRefType(t, ref, OID) + checkRefType(t, ref, ReferenceOid) } diff --git a/repository.go b/repository.go index 3a44000..eec95dc 100644 --- a/repository.go +++ b/repository.go @@ -83,11 +83,11 @@ func (v *Repository) lookupType(oid *Oid, t ObjectType) (Object, error) { } func (v *Repository) Lookup(oid *Oid) (Object, error) { - return v.lookupType(oid, OBJ_ANY) + return v.lookupType(oid, ObjectAny) } func (v *Repository) LookupTree(oid *Oid) (*Tree, error) { - obj, err := v.lookupType(oid, OBJ_TREE) + obj, err := v.lookupType(oid, ObjectTree) if err != nil { return nil, err } @@ -96,7 +96,7 @@ func (v *Repository) LookupTree(oid *Oid) (*Tree, error) { } func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) { - obj, err := v.lookupType(oid, OBJ_COMMIT) + obj, err := v.lookupType(oid, ObjectCommit) if err != nil { return nil, err } @@ -105,7 +105,7 @@ func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) { } func (v *Repository) LookupBlob(oid *Oid) (*Blob, error) { - obj, err := v.lookupType(oid, OBJ_BLOB) + obj, err := v.lookupType(oid, ObjectBlob) if err != nil { return nil, err } diff --git a/walk.go b/walk.go index 216eb65..1d560b6 100644 --- a/walk.go +++ b/walk.go @@ -14,10 +14,10 @@ import ( // RevWalk const ( - SORT_NONE = C.GIT_SORT_NONE - SORT_TOPOLOGICAL = C.GIT_SORT_TOPOLOGICAL - SORT_TIME = C.GIT_SORT_TIME - SORT_REVERSE = C.GIT_SORT_REVERSE + SortNone = C.GIT_SORT_NONE + SortTopological = C.GIT_SORT_TOPOLOGICAL + SortTime = C.GIT_SORT_TIME + SortReverse = C.GIT_SORT_REVERSE ) type RevWalk struct { -- 2.45.2 From b5aca803db4cf9adce0a037cc5ccc47c4c045510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Thu, 12 Sep 2013 10:46:20 +0200 Subject: [PATCH 2/2] Give each const group a type This allows us to restrict which constants the compiler will allow through, and makes the sorting in the documentation better. --- reference.go | 9 +++++---- reference_test.go | 2 +- tree.go | 3 ++- walk.go | 11 ++++++----- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/reference.go b/reference.go index fae676f..86e9ee0 100644 --- a/reference.go +++ b/reference.go @@ -11,9 +11,10 @@ import ( "unsafe" ) +type ReferenceType int const ( - ReferenceSymbolic = C.GIT_REF_SYMBOLIC - ReferenceOid = C.GIT_REF_OID + ReferenceSymbolic ReferenceType = C.GIT_REF_SYMBOLIC + ReferenceOid = C.GIT_REF_OID ) type Reference struct { @@ -103,8 +104,8 @@ func (v *Reference) Name() string { return C.GoString(C.git_reference_name(v.ptr)) } -func (v *Reference) Type() int { - return int(C.git_reference_type(v.ptr)) +func (v *Reference) Type() ReferenceType { + return ReferenceType(C.git_reference_type(v.ptr)) } func (v *Reference) Free() { diff --git a/reference_test.go b/reference_test.go index 36387ee..b2acba7 100644 --- a/reference_test.go +++ b/reference_test.go @@ -144,7 +144,7 @@ func compareStringList(t *testing.T, expected, actual []string) { } } -func checkRefType(t *testing.T, ref *Reference, kind int) { +func checkRefType(t *testing.T, ref *Reference, kind ReferenceType) { if ref.Type() == kind { return } diff --git a/tree.go b/tree.go index d1a7c59..3abd31c 100644 --- a/tree.go +++ b/tree.go @@ -13,8 +13,9 @@ import ( "unsafe" ) +type Filemode int const ( - FilemodeNew = C.GIT_FILEMODE_NEW + FilemodeNew Filemode = C.GIT_FILEMODE_NEW FilemodeTree = C.GIT_FILEMODE_TREE FilemodeBlob = C.GIT_FILEMODE_BLOB FilemodeBlobExecutable = C.GIT_FILEMODE_BLOB_EXECUTABLE diff --git a/walk.go b/walk.go index 1d560b6..6525db1 100644 --- a/walk.go +++ b/walk.go @@ -13,11 +13,12 @@ import ( // RevWalk +type SortType uint const ( - SortNone = C.GIT_SORT_NONE - SortTopological = C.GIT_SORT_TOPOLOGICAL - SortTime = C.GIT_SORT_TIME - SortReverse = C.GIT_SORT_REVERSE + SortNone SortType = C.GIT_SORT_NONE + SortTopological = C.GIT_SORT_TOPOLOGICAL + SortTime = C.GIT_SORT_TIME + SortReverse = C.GIT_SORT_REVERSE ) type RevWalk struct { @@ -81,7 +82,7 @@ func (v *RevWalk) Iterate(fun RevWalkIterator) (err error) { return nil } -func (v *RevWalk) Sorting(sm uint) { +func (v *RevWalk) Sorting(sm SortType) { C.git_revwalk_sorting(v.ptr, C.uint(sm)) } -- 2.45.2