summaryrefslogtreecommitdiff
path: root/include/git2/sys/path.h
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2018-10-15 13:54:17 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2018-10-15 13:54:17 +0200
commit05e54e006b84f1a18dffd0a15f750f2792b2b8f9 (patch)
tree464a2b36117a0ed4e01e7fde9ebdb2769c8c0067 /include/git2/sys/path.h
parent814e7acbabc2e756f809057b7746e08839c44cde (diff)
downloadlibgit2-05e54e006b84f1a18dffd0a15f750f2792b2b8f9.tar.gz
path: export the dotgit-checking functionscmn/expose-gitfile-check
These checks are preformed by libgit2 on checkout, but they're also useful for performing checks in applications which do not involve checkout. Expose them under `sys/` as it's still fairly in the weeds even for this library.
Diffstat (limited to 'include/git2/sys/path.h')
-rw-r--r--include/git2/sys/path.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/include/git2/sys/path.h b/include/git2/sys/path.h
new file mode 100644
index 000000000..2a0c7e00d
--- /dev/null
+++ b/include/git2/sys/path.h
@@ -0,0 +1,64 @@
+/*
+ * 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_git_path_h__
+#define INCLUDE_sys_git_path_h__
+
+#include "git2/common.h"
+
+GIT_BEGIN_DECL
+
+/**
+ * The kinds of git-specific files we know about.
+ *
+ * The order needs to stay the same to not break the `gitfiles`
+ * array in path.c
+ */
+typedef enum {
+ /** Check for the .gitignore file */
+ GIT_PATH_GITFILE_GITIGNORE,
+ /** Check for the .gitmodules file */
+ GIT_PATH_GITFILE_GITMODULES,
+ /** Check for the .gitattributes file */
+ GIT_PATH_GITFILE_GITATTRIBUTES
+} git_path_gitfile;
+
+/**
+ * The kinds of checks to perform according to which filesystem we are trying to
+ * protect.
+ */
+typedef enum {
+ /** Do both NTFS- and HFS-specific checks */
+ GIT_PATH_FS_GENERIC,
+ /** Do NTFS-specific checks only */
+ GIT_PATH_FS_NTFS,
+ /** Do HFS-specific checks only */
+ GIT_PATH_FS_HFS
+} git_path_fs;
+
+/**
+ * Check whether a path component corresponds to a .git$SUFFIX
+ * file.
+ *
+ * As some filesystems do special things to filenames when
+ * writing files to disk, you cannot always do a plain string
+ * comparison to verify whether a file name matches an expected
+ * path or not. This function can do the comparison for you,
+ * depending on the filesystem you're on.
+ *
+ * @param path the path component to check
+ * @param pathlen the length of `path` that is to be checked
+ * @param gitfile which file to check against
+ * @param fs which filesystem-specific checks to use
+ * @return 0 in case the file does not match, a positive value if
+ * it does; -1 in case of an error
+ */
+GIT_EXTERN(int) git_path_is_gitfile(const char *path, size_t pathlen, git_path_gitfile gitfile, git_path_fs fs);
+
+GIT_END_DECL
+
+#endif /* INCLUDE_sys_git_path */