From 737b505116f263653ef4f0c80d888b1a87187a2b Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 1 Oct 2014 12:03:24 +0200 Subject: hashsig: Export as a `sys` header --- include/git2/sys/hashsig.h | 76 ++++++++++++++++++++++++++++++++++++++++++++ src/diff_tform.c | 2 +- src/hashsig.c | 2 +- src/hashsig.h | 72 ----------------------------------------- src/merge.c | 2 +- tests/core/buffer.c | 2 +- tests/merge/trees/treediff.c | 2 +- 7 files changed, 81 insertions(+), 77 deletions(-) create mode 100644 include/git2/sys/hashsig.h delete mode 100644 src/hashsig.h diff --git a/include/git2/sys/hashsig.h b/include/git2/sys/hashsig.h new file mode 100644 index 000000000..cd735e1b5 --- /dev/null +++ b/include/git2/sys/hashsig.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) the libgit2 contributors. All rights reserved. + * + * This file is part of libgit2, distributed under the GNU GPL v2 with + * a Linking Exception. For full terms see the included COPYING file. + */ +#ifndef INCLUDE_sys_hashsig_h__ +#define INCLUDE_sys_hashsig_h__ + +#include "git2/common.h" + +GIT_BEGIN_DECL + +/** + * Similarity signature of line hashes for a buffer + */ +typedef struct git_hashsig git_hashsig; + +typedef enum { + GIT_HASHSIG_NORMAL = 0, /* use all data */ + GIT_HASHSIG_IGNORE_WHITESPACE = 1, /* ignore whitespace */ + GIT_HASHSIG_SMART_WHITESPACE = 2, /* ignore \r and all space after \n */ +} git_hashsig_option_t; + +/** + * Build a similarity signature for a buffer + * + * If you have passed a whitespace-ignoring buffer, then the whitespace + * will be removed from the buffer while it is being processed, modifying + * the buffer in place. Sorry about that! + * + * This will return an error if the buffer doesn't contain enough data to + * compute a valid signature. + * + * @param out The array of hashed runs representing the file content + * @param buf The contents of the file to hash + * @param buflen The length of the data at `buf` + * @param generate_pairwise_hashes Should pairwise runs be hashed + */ +GIT_EXTERN(int) git_hashsig_create( + git_hashsig **out, + const char *buf, + size_t buflen, + git_hashsig_option_t opts); + +/** + * Build a similarity signature from a file + * + * This walks through the file, only loading a maximum of 4K of file data at + * a time. Otherwise, it acts just like `git_hashsig_create`. + * + * This will return an error if the file doesn't contain enough data to + * compute a valid signature. + */ +GIT_EXTERN(int) git_hashsig_create_fromfile( + git_hashsig **out, + const char *path, + git_hashsig_option_t opts); + +/** + * Release memory for a content similarity signature + */ +GIT_EXTERN(void) git_hashsig_free(git_hashsig *sig); + +/** + * Measure similarity between two files + * + * @return <0 for error, [0 to 100] as similarity score + */ +GIT_EXTERN(int) git_hashsig_compare( + const git_hashsig *a, + const git_hashsig *b); + +GIT_END_DECL + +#endif diff --git a/src/diff_tform.c b/src/diff_tform.c index 423a0ca33..9ebce06a0 100644 --- a/src/diff_tform.c +++ b/src/diff_tform.c @@ -8,9 +8,9 @@ #include "git2/config.h" #include "git2/blob.h" +#include "git2/sys/hashsig.h" #include "diff.h" -#include "hashsig.h" #include "path.h" #include "fileops.h" #include "config.h" diff --git a/src/hashsig.c b/src/hashsig.c index 109f966ba..a6d5f2041 100644 --- a/src/hashsig.c +++ b/src/hashsig.c @@ -4,7 +4,7 @@ * This file is part of libgit2, distributed under the GNU GPL v2 with * a Linking Exception. For full terms see the included COPYING file. */ -#include "hashsig.h" +#include "git2/sys/hashsig.h" #include "fileops.h" #include "util.h" diff --git a/src/hashsig.h b/src/hashsig.h deleted file mode 100644 index 8c920cbf1..000000000 --- a/src/hashsig.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) the libgit2 contributors. All rights reserved. - * - * This file is part of libgit2, distributed under the GNU GPL v2 with - * a Linking Exception. For full terms see the included COPYING file. - */ -#ifndef INCLUDE_hashsig_h__ -#define INCLUDE_hashsig_h__ - -#include "common.h" - -/** - * Similarity signature of line hashes for a buffer - */ -typedef struct git_hashsig git_hashsig; - -typedef enum { - GIT_HASHSIG_NORMAL = 0, /* use all data */ - GIT_HASHSIG_IGNORE_WHITESPACE = 1, /* ignore whitespace */ - GIT_HASHSIG_SMART_WHITESPACE = 2, /* ignore \r and all space after \n */ -} git_hashsig_option_t; - -/** - * Build a similarity signature for a buffer - * - * If you have passed a whitespace-ignoring buffer, then the whitespace - * will be removed from the buffer while it is being processed, modifying - * the buffer in place. Sorry about that! - * - * This will return an error if the buffer doesn't contain enough data to - * compute a valid signature. - * - * @param out The array of hashed runs representing the file content - * @param buf The contents of the file to hash - * @param buflen The length of the data at `buf` - * @param generate_pairwise_hashes Should pairwise runs be hashed - */ -extern int git_hashsig_create( - git_hashsig **out, - const char *buf, - size_t buflen, - git_hashsig_option_t opts); - -/** - * Build a similarity signature from a file - * - * This walks through the file, only loading a maximum of 4K of file data at - * a time. Otherwise, it acts just like `git_hashsig_create`. - * - * This will return an error if the file doesn't contain enough data to - * compute a valid signature. - */ -extern int git_hashsig_create_fromfile( - git_hashsig **out, - const char *path, - git_hashsig_option_t opts); - -/** - * Release memory for a content similarity signature - */ -extern void git_hashsig_free(git_hashsig *sig); - -/** - * Measure similarity between two files - * - * @return <0 for error, [0 to 100] as similarity score - */ -extern int git_hashsig_compare( - const git_hashsig *a, - const git_hashsig *b); - -#endif diff --git a/src/merge.c b/src/merge.c index ddeea8752..1e72520a4 100644 --- a/src/merge.c +++ b/src/merge.c @@ -22,7 +22,6 @@ #include "tree.h" #include "merge_file.h" #include "blob.h" -#include "hashsig.h" #include "oid.h" #include "index.h" #include "filebuf.h" @@ -42,6 +41,7 @@ #include "git2/tree.h" #include "git2/oidarray.h" #include "git2/sys/index.h" +#include "git2/sys/hashsig.h" #define GIT_MERGE_INDEX_ENTRY_EXISTS(X) ((X).mode != 0) #define GIT_MERGE_INDEX_ENTRY_ISFILE(X) S_ISREG((X).mode) diff --git a/tests/core/buffer.c b/tests/core/buffer.c index 7482dadbe..641fed630 100644 --- a/tests/core/buffer.c +++ b/tests/core/buffer.c @@ -1,7 +1,7 @@ #include "clar_libgit2.h" #include "buffer.h" #include "buf_text.h" -#include "hashsig.h" +#include "git2/sys/hashsig.h" #include "fileops.h" #define TESTSTR "Have you seen that? Have you seeeen that??" diff --git a/tests/merge/trees/treediff.c b/tests/merge/trees/treediff.c index 2298a302b..8b47f7dee 100644 --- a/tests/merge/trees/treediff.c +++ b/tests/merge/trees/treediff.c @@ -3,7 +3,7 @@ #include "merge.h" #include "../merge_helpers.h" #include "diff.h" -#include "hashsig.h" +#include "git2/sys/hashsig.h" static git_repository *repo; -- cgit v1.2.1