| /* |
| * 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 |