summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@github.com>2016-08-03 17:09:41 -0400
committerEdward Thomson <ethomson@github.com>2016-08-03 17:57:37 -0400
commit002c8e29a1bbe7bf5c07c9c26037d4f6a1ac81a6 (patch)
tree0b5d4385c8f197eedb77f89752edb9c0f93f2bbb
parent152efee20b74ea261cf8e05410a110687e17376e (diff)
downloadlibgit2-ethomson/diff_file.tar.gz
git_diff_file: move `id_abbrev`ethomson/diff_file
Move `id_abbrev` to a more reasonable place where it packs more nicely (before anybody starts using it).
-rw-r--r--CHANGELOG.md4
-rw-r--r--include/git2/diff.h12
-rw-r--r--src/patch_parse.c6
3 files changed, 12 insertions, 10 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8f647ea5e..241c7be61 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -51,7 +51,6 @@ v0.24 + 1
* `git_blob_create_fromchunks()` has been removed in favour of
`git_blob_create_fromstream()`.
-
### Breaking API changes
* `git_packbuilder_object_count` and `git_packbuilder_written` now
@@ -61,6 +60,9 @@ v0.24 + 1
* `git_packbuiler_progress` now provides explicitly sized `uint32_t`
values instead of `unsigned int`.
+* `git_diff_file` now includes an `id_abbrev` field that reflects the
+ number of nibbles set in the `id` field.
+
v0.24
-------
diff --git a/include/git2/diff.h b/include/git2/diff.h
index 005b33965..ac5db711c 100644
--- a/include/git2/diff.h
+++ b/include/git2/diff.h
@@ -268,11 +268,6 @@ typedef enum {
* absent side of a diff (e.g. the `old_file` of a `GIT_DELTA_ADDED` delta),
* then the oid will be zeroes.
*
- * The `id_abbrev` represents the known length of the `id` field, when
- * converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this
- * delta was created from reading a patch file, in which case it may be
- * abbreviated to something reasonable, like 7 characters.
- *
* `path` is the NUL-terminated path to the entry relative to the working
* directory of the repository.
*
@@ -282,14 +277,19 @@ typedef enum {
*
* `mode` is, roughly, the stat() `st_mode` value for the item. This will
* be restricted to one of the `git_filemode_t` values.
+ *
+ * The `id_abbrev` represents the known length of the `id` field, when
+ * converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this
+ * delta was created from reading a patch file, in which case it may be
+ * abbreviated to something reasonable, like 7 characters.
*/
typedef struct {
git_oid id;
- int id_abbrev;
const char *path;
git_off_t size;
uint32_t flags;
uint16_t mode;
+ uint16_t id_abbrev;
} git_diff_file;
/**
diff --git a/src/patch_parse.c b/src/patch_parse.c
index ddaece62c..82d2d3e2e 100644
--- a/src/patch_parse.c
+++ b/src/patch_parse.c
@@ -192,7 +192,7 @@ static int parse_header_mode(uint16_t *mode, git_patch_parse_ctx *ctx)
static int parse_header_oid(
git_oid *oid,
- int *oid_len,
+ uint16_t *oid_len,
git_patch_parse_ctx *ctx)
{
size_t len;
@@ -202,14 +202,14 @@ static int parse_header_oid(
break;
}
- if (len < GIT_OID_MINPREFIXLEN ||
+ if (len < GIT_OID_MINPREFIXLEN || len > GIT_OID_HEXSZ ||
git_oid_fromstrn(oid, ctx->line, len) < 0)
return parse_err("invalid hex formatted object id at line %d",
ctx->line_num);
parse_advance_chars(ctx, len);
- *oid_len = (int)len;
+ *oid_len = (uint16_t)len;
return 0;
}