diff options
author | Marc Pegon <pegon.marc@gmail.com> | 2011-05-28 21:24:25 +0200 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2011-06-01 23:40:41 +0200 |
commit | ac2b94ad7658b53035b8518842348a083decd418 (patch) | |
tree | 19c5220d8493f697a4f09557ca4dfafb6cc12b36 | |
parent | dd453c4dbf9a1fa38530b1f51e079852736b8f66 (diff) | |
download | libgit2-ac2b94ad7658b53035b8518842348a083decd418.tar.gz |
Added a GIT_OID_MINPREFIXLEN constant to define the minimum length allowed for oid prefixes (set to 4, like in git). Consequently updated some object lookup methods and their documentation.
-rw-r--r-- | include/git2/object.h | 6 | ||||
-rw-r--r-- | include/git2/odb.h | 5 | ||||
-rw-r--r-- | include/git2/oid.h | 4 | ||||
-rw-r--r-- | src/object.c | 4 | ||||
-rw-r--r-- | src/odb_pack.c | 4 |
5 files changed, 16 insertions, 7 deletions
diff --git a/include/git2/object.h b/include/git2/object.h index 4cb6af0ad..cadb942e0 100644 --- a/include/git2/object.h +++ b/include/git2/object.h @@ -65,9 +65,9 @@ GIT_EXTERN(int) git_object_lookup(git_object **object, git_repository *repo, con * The object obtained will be so that its identifier * matches the first 'len' hexadecimal characters * (packets of 4 bits) of the given 'id'. - * 'len' must be long enough to identify a unique - * object matching the prefix; otherwise the method will - * fail. + * 'len' must be at least GIT_OID_MINPREFIXLEN, and + * long enough to identify a unique object matching + * the prefix; otherwise the method will fail. * * The generated reference is owned by the repository and * should be closed with the `git_object_close` method diff --git a/include/git2/odb.h b/include/git2/odb.h index 483934ad3..6c08ade54 100644 --- a/include/git2/odb.h +++ b/include/git2/odb.h @@ -132,9 +132,10 @@ GIT_EXTERN(int) git_odb_read(git_odb_object **out, git_odb *db, const git_oid *i * This method queries all available ODB backends * trying to match the 'len' first hexadecimal * characters of the 'short_id'. - * The remaining bits (GIT_OID_HEXSZ-len)*4 bits of + * The remaining (GIT_OID_HEXSZ-len)*4 bits of * 'short_id' must be 0s. - * The prefix must be long enough to identify + * 'len' must be at least GIT_OID_MINPREFIXLEN, + * and the prefix must be long enough to identify * a unique object in all the backends; the * method will fail otherwise. * diff --git a/include/git2/oid.h b/include/git2/oid.h index e8803ced8..062b9ca8b 100644 --- a/include/git2/oid.h +++ b/include/git2/oid.h @@ -43,6 +43,10 @@ GIT_BEGIN_DECL /** Size (in bytes) of a hex formatted oid */ #define GIT_OID_HEXSZ (GIT_OID_RAWSZ * 2) +/** Minimum length (in number of hex characters, + * i.e. packets of 4 bits) of an oid prefix */ +#define GIT_OID_MINPREFIXLEN 4 + /** Unique identity of any object (commit, tree, blob, tag). */ typedef struct { /** raw binary formatted id */ diff --git a/src/object.c b/src/object.c index e6e976756..db8d2062c 100644 --- a/src/object.c +++ b/src/object.c @@ -104,8 +104,8 @@ int git_object_lookup_short_oid(git_object **object_out, git_repository *repo, c assert(repo && object_out && id); - if (len == 0) - return git__throw(GIT_EAMBIGUOUSOIDPREFIX, "Failed to lookup object. Prefix length should be not be 0."); + if (len < GIT_OID_MINPREFIXLEN) + return git__throw(GIT_EAMBIGUOUSOIDPREFIX, "Failed to lookup object. Prefix length is lower than %d.", GIT_OID_MINPREFIXLEN); if (len > GIT_OID_HEXSZ) { len = GIT_OID_HEXSZ; } diff --git a/src/odb_pack.c b/src/odb_pack.c index 605608314..070bde6e2 100644 --- a/src/odb_pack.c +++ b/src/odb_pack.c @@ -268,6 +268,8 @@ static off_t nth_packed_object_offset(const struct pack_file *p, uint32_t n); * a prefix of an identifier. * Throws GIT_EAMBIGUOUSOIDPREFIX if short oid * is ambiguous within the pack. + * This method assumes that len is between + * GIT_OID_MINPREFIXLEN and GIT_OID_HEXSZ. */ static int pack_entry_find_offset( off_t *offset_out, @@ -289,6 +291,8 @@ static int pack_entry_find(struct pack_entry *e, * a prefix of an identifier. * Throws GIT_EAMBIGUOUSOIDPREFIX if short oid * is ambiguous. + * This method assumes that len is between + * GIT_OID_MINPREFIXLEN and GIT_OID_HEXSZ. */ static int pack_entry_find_unique_short_oid(struct pack_entry *e, struct pack_backend *backend, |