rugged 0.17.0.b7 → 0.18.0.b1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +1 -1
- data/README.md +88 -32
- data/ext/rugged/extconf.rb +4 -2
- data/ext/rugged/rugged.c +72 -10
- data/ext/rugged/rugged.h +14 -10
- data/ext/rugged/rugged_blob.c +8 -10
- data/ext/rugged/rugged_branch.c +11 -14
- data/ext/rugged/rugged_commit.c +31 -24
- data/ext/rugged/rugged_config.c +2 -2
- data/ext/rugged/rugged_index.c +133 -198
- data/ext/rugged/rugged_note.c +372 -0
- data/ext/rugged/rugged_object.c +50 -22
- data/ext/rugged/rugged_reference.c +122 -130
- data/ext/rugged/rugged_remote.c +72 -29
- data/ext/rugged/rugged_repo.c +402 -20
- data/ext/rugged/rugged_revwalk.c +7 -3
- data/ext/rugged/rugged_settings.c +110 -0
- data/ext/rugged/rugged_signature.c +23 -7
- data/ext/rugged/rugged_tag.c +32 -16
- data/ext/rugged/rugged_tree.c +44 -15
- data/lib/rugged.rb +1 -0
- data/lib/rugged/index.rb +8 -0
- data/lib/rugged/remote.rb +13 -0
- data/lib/rugged/repository.rb +3 -3
- data/lib/rugged/version.rb +1 -1
- data/test/blob_test.rb +13 -15
- data/test/branch_test.rb +32 -67
- data/test/commit_test.rb +50 -12
- data/test/config_test.rb +12 -11
- data/test/coverage/HEAD.json +1 -1
- data/test/coverage/cover.rb +40 -21
- data/test/errors_test.rb +34 -0
- data/test/fixtures/alternate/objects/14/6ae76773c91e3b1d00cf7a338ec55ae58297e2 +0 -0
- data/test/fixtures/alternate/objects/14/9c32d47e99d0a3572ff1e70a2e0051bbf347a9 +0 -0
- data/test/fixtures/alternate/objects/14/fb3108588f9421bf764041e5e3ac305eb6277f +0 -0
- data/test/fixtures/testrepo.git/logs/refs/notes/commits +1 -0
- data/test/fixtures/testrepo.git/objects/44/1034f860c1d5d90e4188d11ae0d325176869a8 +1 -0
- data/test/fixtures/testrepo.git/objects/60/d415052a33de2150bf68757f6461df4f563ae4 +0 -0
- data/test/fixtures/testrepo.git/objects/68/8a8f4ef7496901d15322972f96e212a9e466cc +1 -0
- data/test/fixtures/testrepo.git/objects/94/eca2de348d5f672faf56b0decafa5937e3235e +0 -0
- data/test/fixtures/testrepo.git/objects/9b/7384fe1676186192842f5d3e129457b62db9e3 +0 -0
- data/test/fixtures/testrepo.git/objects/b7/4713326bc972cc15751ed504dca6f6f3b91f7a +3 -0
- data/test/fixtures/testrepo.git/refs/notes/commits +1 -0
- data/test/index_test.rb +65 -69
- data/test/lib_test.rb +76 -11
- data/test/note_test.rb +158 -0
- data/test/object_test.rb +8 -11
- data/test/reference_test.rb +77 -85
- data/test/remote_test.rb +86 -8
- data/test/repo_pack_test.rb +9 -7
- data/test/repo_reset_test.rb +80 -0
- data/test/repo_test.rb +176 -53
- data/test/tag_test.rb +44 -7
- data/test/test_helper.rb +63 -35
- data/test/tree_test.rb +34 -13
- data/test/walker_test.rb +14 -14
- data/vendor/libgit2/Makefile.embed +1 -1
- data/vendor/libgit2/deps/http-parser/http_parser.c +974 -578
- data/vendor/libgit2/deps/http-parser/http_parser.h +106 -70
- data/vendor/libgit2/deps/regex/regcomp.c +7 -6
- data/vendor/libgit2/deps/regex/regex_internal.c +1 -1
- data/vendor/libgit2/deps/regex/regex_internal.h +12 -3
- data/vendor/libgit2/deps/regex/regexec.c +5 -5
- data/vendor/libgit2/include/git2.h +5 -1
- data/vendor/libgit2/include/git2/attr.h +4 -2
- data/vendor/libgit2/include/git2/blob.h +39 -12
- data/vendor/libgit2/include/git2/branch.h +123 -35
- data/vendor/libgit2/include/git2/checkout.h +206 -48
- data/vendor/libgit2/include/git2/clone.h +72 -27
- data/vendor/libgit2/include/git2/commit.h +20 -17
- data/vendor/libgit2/include/git2/common.h +67 -1
- data/vendor/libgit2/include/git2/config.h +81 -60
- data/vendor/libgit2/include/git2/cred_helpers.h +53 -0
- data/vendor/libgit2/include/git2/diff.h +459 -150
- data/vendor/libgit2/include/git2/errors.h +9 -1
- data/vendor/libgit2/include/git2/graph.h +41 -0
- data/vendor/libgit2/include/git2/ignore.h +7 -6
- data/vendor/libgit2/include/git2/index.h +323 -97
- data/vendor/libgit2/include/git2/indexer.h +27 -59
- data/vendor/libgit2/include/git2/inttypes.h +4 -0
- data/vendor/libgit2/include/git2/merge.h +13 -3
- data/vendor/libgit2/include/git2/message.h +14 -8
- data/vendor/libgit2/include/git2/net.h +9 -7
- data/vendor/libgit2/include/git2/notes.h +88 -29
- data/vendor/libgit2/include/git2/object.h +16 -6
- data/vendor/libgit2/include/git2/odb.h +80 -17
- data/vendor/libgit2/include/git2/odb_backend.h +47 -11
- data/vendor/libgit2/include/git2/oid.h +26 -17
- data/vendor/libgit2/include/git2/pack.h +62 -8
- data/vendor/libgit2/include/git2/push.h +131 -0
- data/vendor/libgit2/include/git2/refdb.h +103 -0
- data/vendor/libgit2/include/git2/refdb_backend.h +109 -0
- data/vendor/libgit2/include/git2/reflog.h +30 -21
- data/vendor/libgit2/include/git2/refs.h +215 -193
- data/vendor/libgit2/include/git2/refspec.h +22 -2
- data/vendor/libgit2/include/git2/remote.h +158 -37
- data/vendor/libgit2/include/git2/repository.h +150 -31
- data/vendor/libgit2/include/git2/reset.h +43 -9
- data/vendor/libgit2/include/git2/revparse.h +48 -4
- data/vendor/libgit2/include/git2/revwalk.h +25 -10
- data/vendor/libgit2/include/git2/signature.h +20 -12
- data/vendor/libgit2/include/git2/stash.h +121 -0
- data/vendor/libgit2/include/git2/status.h +122 -53
- data/vendor/libgit2/include/git2/strarray.h +17 -11
- data/vendor/libgit2/include/git2/submodule.h +42 -7
- data/vendor/libgit2/include/git2/tag.h +72 -59
- data/vendor/libgit2/include/git2/threads.h +4 -2
- data/vendor/libgit2/include/git2/trace.h +68 -0
- data/vendor/libgit2/include/git2/transport.h +328 -0
- data/vendor/libgit2/include/git2/tree.h +149 -120
- data/vendor/libgit2/include/git2/types.h +13 -12
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/src/amiga/map.c +2 -2
- data/vendor/libgit2/src/attr.c +58 -48
- data/vendor/libgit2/src/attr.h +4 -18
- data/vendor/libgit2/src/attr_file.c +30 -6
- data/vendor/libgit2/src/attr_file.h +6 -8
- data/vendor/libgit2/src/attrcache.h +24 -0
- data/vendor/libgit2/src/blob.c +30 -7
- data/vendor/libgit2/src/blob.h +1 -1
- data/vendor/libgit2/src/branch.c +361 -68
- data/vendor/libgit2/src/branch.h +17 -0
- data/vendor/libgit2/src/bswap.h +1 -1
- data/vendor/libgit2/src/buf_text.c +291 -0
- data/vendor/libgit2/src/buf_text.h +122 -0
- data/vendor/libgit2/src/buffer.c +27 -101
- data/vendor/libgit2/src/buffer.h +54 -39
- data/vendor/libgit2/src/cache.c +15 -6
- data/vendor/libgit2/src/cache.h +1 -1
- data/vendor/libgit2/src/cc-compat.h +3 -1
- data/vendor/libgit2/src/checkout.c +1165 -222
- data/vendor/libgit2/src/checkout.h +24 -0
- data/vendor/libgit2/src/clone.c +171 -86
- data/vendor/libgit2/src/commit.c +44 -45
- data/vendor/libgit2/src/commit.h +3 -3
- data/vendor/libgit2/src/commit_list.c +194 -0
- data/vendor/libgit2/src/commit_list.h +49 -0
- data/vendor/libgit2/src/common.h +44 -10
- data/vendor/libgit2/src/compress.c +1 -1
- data/vendor/libgit2/src/compress.h +1 -1
- data/vendor/libgit2/src/config.c +211 -124
- data/vendor/libgit2/src/config.h +23 -4
- data/vendor/libgit2/src/config_cache.c +2 -2
- data/vendor/libgit2/src/config_file.c +129 -53
- data/vendor/libgit2/src/config_file.h +10 -8
- data/vendor/libgit2/src/crlf.c +66 -67
- data/vendor/libgit2/src/date.c +12 -12
- data/vendor/libgit2/src/delta-apply.c +14 -1
- data/vendor/libgit2/src/delta-apply.h +18 -1
- data/vendor/libgit2/src/delta.c +40 -107
- data/vendor/libgit2/src/delta.h +19 -17
- data/vendor/libgit2/src/diff.c +347 -496
- data/vendor/libgit2/src/diff.h +27 -1
- data/vendor/libgit2/src/diff_output.c +564 -249
- data/vendor/libgit2/src/diff_output.h +15 -8
- data/vendor/libgit2/src/diff_tform.c +687 -0
- data/vendor/libgit2/src/errors.c +27 -36
- data/vendor/libgit2/src/fetch.c +13 -351
- data/vendor/libgit2/src/fetch.h +13 -3
- data/vendor/libgit2/src/fetchhead.c +295 -0
- data/vendor/libgit2/src/fetchhead.h +34 -0
- data/vendor/libgit2/src/filebuf.c +42 -15
- data/vendor/libgit2/src/filebuf.h +4 -2
- data/vendor/libgit2/src/fileops.c +466 -113
- data/vendor/libgit2/src/fileops.h +154 -28
- data/vendor/libgit2/src/filter.c +3 -75
- data/vendor/libgit2/src/filter.h +1 -29
- data/vendor/libgit2/src/fnmatch.c +1 -1
- data/vendor/libgit2/src/fnmatch.h +1 -1
- data/vendor/libgit2/src/global.c +54 -10
- data/vendor/libgit2/src/global.h +10 -1
- data/vendor/libgit2/src/graph.c +178 -0
- data/vendor/libgit2/src/hash.c +25 -52
- data/vendor/libgit2/src/hash.h +21 -9
- data/vendor/libgit2/src/{sha1/sha1.c → hash/hash_generic.c} +20 -12
- data/vendor/libgit2/src/hash/hash_generic.h +24 -0
- data/vendor/libgit2/src/hash/hash_openssl.h +45 -0
- data/vendor/libgit2/src/hash/hash_win32.c +291 -0
- data/vendor/libgit2/src/hash/hash_win32.h +140 -0
- data/vendor/libgit2/src/hashsig.c +368 -0
- data/vendor/libgit2/src/hashsig.h +72 -0
- data/vendor/libgit2/src/ignore.c +22 -15
- data/vendor/libgit2/src/ignore.h +6 -1
- data/vendor/libgit2/src/index.c +770 -171
- data/vendor/libgit2/src/index.h +13 -5
- data/vendor/libgit2/src/indexer.c +286 -431
- data/vendor/libgit2/src/iterator.c +854 -466
- data/vendor/libgit2/src/iterator.h +134 -109
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +296 -0
- data/vendor/libgit2/src/merge.h +22 -0
- data/vendor/libgit2/src/message.c +1 -1
- data/vendor/libgit2/src/message.h +1 -1
- data/vendor/libgit2/src/mwindow.c +35 -30
- data/vendor/libgit2/src/mwindow.h +2 -2
- data/vendor/libgit2/src/netops.c +162 -98
- data/vendor/libgit2/src/netops.h +50 -15
- data/vendor/libgit2/src/notes.c +109 -58
- data/vendor/libgit2/src/notes.h +2 -1
- data/vendor/libgit2/src/object.c +46 -57
- data/vendor/libgit2/src/object.h +1 -8
- data/vendor/libgit2/src/odb.c +151 -40
- data/vendor/libgit2/src/odb.h +5 -1
- data/vendor/libgit2/src/odb_loose.c +4 -5
- data/vendor/libgit2/src/odb_pack.c +122 -80
- data/vendor/libgit2/src/offmap.h +65 -0
- data/vendor/libgit2/src/oid.c +12 -4
- data/vendor/libgit2/src/oidmap.h +1 -1
- data/vendor/libgit2/src/pack-objects.c +88 -61
- data/vendor/libgit2/src/pack-objects.h +8 -8
- data/vendor/libgit2/src/pack.c +293 -28
- data/vendor/libgit2/src/pack.h +49 -4
- data/vendor/libgit2/src/path.c +103 -14
- data/vendor/libgit2/src/path.h +23 -7
- data/vendor/libgit2/src/pathspec.c +168 -0
- data/vendor/libgit2/src/pathspec.h +40 -0
- data/vendor/libgit2/src/pool.c +29 -4
- data/vendor/libgit2/src/pool.h +8 -1
- data/vendor/libgit2/src/posix.c +26 -27
- data/vendor/libgit2/src/posix.h +2 -3
- data/vendor/libgit2/src/pqueue.c +23 -1
- data/vendor/libgit2/src/pqueue.h +23 -1
- data/vendor/libgit2/src/push.c +653 -0
- data/vendor/libgit2/src/push.h +51 -0
- data/vendor/libgit2/src/refdb.c +185 -0
- data/vendor/libgit2/src/refdb.h +46 -0
- data/vendor/libgit2/src/refdb_fs.c +1024 -0
- data/vendor/libgit2/src/refdb_fs.h +15 -0
- data/vendor/libgit2/src/reflog.c +77 -45
- data/vendor/libgit2/src/reflog.h +1 -3
- data/vendor/libgit2/src/refs.c +366 -1326
- data/vendor/libgit2/src/refs.h +22 -13
- data/vendor/libgit2/src/refspec.c +46 -7
- data/vendor/libgit2/src/refspec.h +11 -1
- data/vendor/libgit2/src/remote.c +758 -120
- data/vendor/libgit2/src/remote.h +10 -5
- data/vendor/libgit2/src/repo_template.h +6 -6
- data/vendor/libgit2/src/repository.c +315 -96
- data/vendor/libgit2/src/repository.h +5 -3
- data/vendor/libgit2/src/reset.c +99 -81
- data/vendor/libgit2/src/revparse.c +157 -84
- data/vendor/libgit2/src/revwalk.c +68 -470
- data/vendor/libgit2/src/revwalk.h +44 -0
- data/vendor/libgit2/src/sha1_lookup.c +1 -1
- data/vendor/libgit2/src/sha1_lookup.h +1 -1
- data/vendor/libgit2/src/signature.c +68 -200
- data/vendor/libgit2/src/signature.h +1 -1
- data/vendor/libgit2/src/stash.c +663 -0
- data/vendor/libgit2/src/status.c +101 -79
- data/vendor/libgit2/src/strmap.h +1 -1
- data/vendor/libgit2/src/submodule.c +67 -51
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/tag.c +35 -29
- data/vendor/libgit2/src/tag.h +1 -1
- data/vendor/libgit2/src/thread-utils.c +1 -1
- data/vendor/libgit2/src/thread-utils.h +2 -2
- data/vendor/libgit2/src/trace.c +39 -0
- data/vendor/libgit2/src/trace.h +56 -0
- data/vendor/libgit2/src/transport.c +81 -34
- data/vendor/libgit2/src/transports/cred.c +60 -0
- data/vendor/libgit2/src/transports/cred_helpers.c +49 -0
- data/vendor/libgit2/src/transports/git.c +234 -127
- data/vendor/libgit2/src/transports/http.c +761 -433
- data/vendor/libgit2/src/transports/local.c +460 -64
- data/vendor/libgit2/src/transports/smart.c +345 -0
- data/vendor/libgit2/src/transports/smart.h +179 -0
- data/vendor/libgit2/src/{pkt.c → transports/smart_pkt.c} +131 -12
- data/vendor/libgit2/src/transports/smart_protocol.c +856 -0
- data/vendor/libgit2/src/transports/winhttp.c +1136 -0
- data/vendor/libgit2/src/tree-cache.c +2 -2
- data/vendor/libgit2/src/tree-cache.h +1 -1
- data/vendor/libgit2/src/tree.c +239 -166
- data/vendor/libgit2/src/tree.h +11 -2
- data/vendor/libgit2/src/tsort.c +39 -23
- data/vendor/libgit2/src/unix/map.c +1 -1
- data/vendor/libgit2/src/unix/posix.h +12 -2
- data/vendor/libgit2/src/unix/realpath.c +30 -0
- data/vendor/libgit2/src/util.c +250 -13
- data/vendor/libgit2/src/util.h +71 -14
- data/vendor/libgit2/src/vector.c +123 -60
- data/vendor/libgit2/src/vector.h +24 -22
- data/vendor/libgit2/src/win32/dir.c +1 -1
- data/vendor/libgit2/src/win32/dir.h +1 -1
- data/vendor/libgit2/src/win32/error.c +77 -0
- data/vendor/libgit2/src/win32/error.h +13 -0
- data/vendor/libgit2/src/win32/findfile.c +143 -54
- data/vendor/libgit2/src/win32/findfile.h +10 -6
- data/vendor/libgit2/src/win32/map.c +1 -1
- data/vendor/libgit2/src/win32/mingw-compat.h +1 -1
- data/vendor/libgit2/src/win32/msvc-compat.h +10 -1
- data/vendor/libgit2/src/win32/posix.h +10 -1
- data/vendor/libgit2/src/win32/posix_w32.c +132 -63
- data/vendor/libgit2/src/win32/precompiled.c +1 -1
- data/vendor/libgit2/src/win32/pthread.c +1 -1
- data/vendor/libgit2/src/win32/pthread.h +1 -1
- data/vendor/libgit2/src/win32/utf-conv.c +5 -5
- data/vendor/libgit2/src/win32/utf-conv.h +3 -3
- data/vendor/libgit2/src/win32/version.h +20 -0
- metadata +308 -252
- data/test/fixtures/testrepo.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 +0 -0
- data/test/fixtures/testrepo.git/objects/7f/043268ea43ce18e3540acaabf9e090c91965b0 +0 -0
- data/test/fixtures/testrepo.git/objects/a3/e05719b428a2d0ed7a55c4ce53dcc5768c6d5e +0 -0
- data/test/index_test.rb~ +0 -218
- data/vendor/libgit2/src/pkt.h +0 -91
- data/vendor/libgit2/src/ppc/sha1.c +0 -70
- data/vendor/libgit2/src/ppc/sha1.h +0 -26
- data/vendor/libgit2/src/protocol.c +0 -110
- data/vendor/libgit2/src/protocol.h +0 -21
- data/vendor/libgit2/src/sha1.h +0 -33
- data/vendor/libgit2/src/transport.h +0 -148
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -8,16 +8,20 @@
|
|
|
8
8
|
#ifndef INCLUDE_git_findfile_h__
|
|
9
9
|
#define INCLUDE_git_findfile_h__
|
|
10
10
|
|
|
11
|
-
struct
|
|
11
|
+
struct git_win32__path {
|
|
12
12
|
wchar_t path[MAX_PATH];
|
|
13
13
|
DWORD len;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
int
|
|
16
|
+
extern int git_win32__expand_path(
|
|
17
|
+
struct git_win32__path *s_root, const wchar_t *templ);
|
|
17
18
|
|
|
18
|
-
int
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
extern int git_win32__find_file(
|
|
20
|
+
git_buf *path, const struct git_win32__path *root, const char *filename);
|
|
21
|
+
|
|
22
|
+
extern int git_win32__find_system_dirs(git_buf *out);
|
|
23
|
+
extern int git_win32__find_global_dirs(git_buf *out);
|
|
24
|
+
extern int git_win32__find_xdg_dirs(git_buf *out);
|
|
21
25
|
|
|
22
26
|
#endif
|
|
23
27
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -37,6 +37,15 @@
|
|
|
37
37
|
/* MSVC doesn't define ssize_t at all */
|
|
38
38
|
typedef SSIZE_T ssize_t;
|
|
39
39
|
|
|
40
|
+
/* define snprintf using variadic macro support if available */
|
|
41
|
+
#if _MSC_VER >= 1400
|
|
42
|
+
# define snprintf(BUF, SZ, FMT, ...) _snprintf_s(BUF, SZ, _TRUNCATE, FMT, __VA_ARGS__)
|
|
43
|
+
#else
|
|
44
|
+
# define snprintf _snprintf
|
|
40
45
|
#endif
|
|
41
46
|
|
|
47
|
+
#endif
|
|
48
|
+
|
|
49
|
+
#define GIT_STDLIB_CALL __cdecl
|
|
50
|
+
|
|
42
51
|
#endif /* INCLUDE_msvc_compat__ */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -48,5 +48,14 @@ extern int p_getcwd(char *buffer_out, size_t size);
|
|
|
48
48
|
extern int p_rename(const char *from, const char *to);
|
|
49
49
|
extern int p_recv(GIT_SOCKET socket, void *buffer, size_t length, int flags);
|
|
50
50
|
extern int p_send(GIT_SOCKET socket, const void *buffer, size_t length, int flags);
|
|
51
|
+
extern int p_inet_pton(int af, const char* src, void* dst);
|
|
52
|
+
|
|
53
|
+
/* p_lstat is almost but not quite POSIX correct. Specifically, the use of
|
|
54
|
+
* ENOTDIR is wrong, in that it does not mean precisely that a non-directory
|
|
55
|
+
* entry was encountered. Making it correct is potentially expensive,
|
|
56
|
+
* however, so this is a separate version of p_lstat to use when correct
|
|
57
|
+
* POSIX ENOTDIR semantics is required.
|
|
58
|
+
*/
|
|
59
|
+
extern int p_lstat_posixly(const char *filename, struct stat *buf);
|
|
51
60
|
|
|
52
61
|
#endif
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
#include <errno.h>
|
|
12
12
|
#include <io.h>
|
|
13
13
|
#include <fcntl.h>
|
|
14
|
-
|
|
14
|
+
#include <ws2tcpip.h>
|
|
15
15
|
|
|
16
16
|
int p_unlink(const char *path)
|
|
17
17
|
{
|
|
@@ -52,17 +52,32 @@ GIT_INLINE(time_t) filetime_to_time_t(const FILETIME *ft)
|
|
|
52
52
|
return (time_t)winTime;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
#define WIN32_IS_WSEP(CH) ((CH) == L'/' || (CH) == L'\\')
|
|
56
|
+
|
|
57
|
+
static int do_lstat(
|
|
58
|
+
const char *file_name, struct stat *buf, int posix_enotdir)
|
|
56
59
|
{
|
|
57
60
|
WIN32_FILE_ATTRIBUTE_DATA fdata;
|
|
58
|
-
wchar_t fbuf[GIT_WIN_PATH];
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
git__utf8_to_16(fbuf, GIT_WIN_PATH, file_name);
|
|
61
|
+
wchar_t fbuf[GIT_WIN_PATH], lastch;
|
|
62
|
+
int flen;
|
|
63
|
+
|
|
64
|
+
flen = git__utf8_to_16(fbuf, GIT_WIN_PATH, file_name);
|
|
65
|
+
|
|
66
|
+
/* truncate trailing slashes */
|
|
67
|
+
for (; flen > 0; --flen) {
|
|
68
|
+
lastch = fbuf[flen - 1];
|
|
69
|
+
if (WIN32_IS_WSEP(lastch))
|
|
70
|
+
fbuf[flen - 1] = L'\0';
|
|
71
|
+
else if (lastch != L'\0')
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
62
74
|
|
|
63
75
|
if (GetFileAttributesExW(fbuf, GetFileExInfoStandard, &fdata)) {
|
|
64
76
|
int fMode = S_IREAD;
|
|
65
77
|
|
|
78
|
+
if (!buf)
|
|
79
|
+
return 0;
|
|
80
|
+
|
|
66
81
|
if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|
67
82
|
fMode |= S_IFDIR;
|
|
68
83
|
else
|
|
@@ -84,48 +99,60 @@ static int do_lstat(const char *file_name, struct stat *buf)
|
|
|
84
99
|
buf->st_atime = filetime_to_time_t(&(fdata.ftLastAccessTime));
|
|
85
100
|
buf->st_mtime = filetime_to_time_t(&(fdata.ftLastWriteTime));
|
|
86
101
|
buf->st_ctime = filetime_to_time_t(&(fdata.ftCreationTime));
|
|
87
|
-
return 0;
|
|
88
|
-
}
|
|
89
102
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
103
|
+
/* Windows symlinks have zero file size, call readlink to determine
|
|
104
|
+
* the length of the path pointed to, which we expect everywhere else
|
|
105
|
+
*/
|
|
106
|
+
if (S_ISLNK(fMode)) {
|
|
107
|
+
char target[GIT_WIN_PATH];
|
|
108
|
+
int readlink_result;
|
|
95
109
|
|
|
96
|
-
|
|
97
|
-
}
|
|
110
|
+
readlink_result = p_readlink(file_name, target, GIT_WIN_PATH);
|
|
98
111
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
int error;
|
|
102
|
-
size_t namelen;
|
|
103
|
-
char *alt_name;
|
|
112
|
+
if (readlink_result == -1)
|
|
113
|
+
return -1;
|
|
104
114
|
|
|
105
|
-
|
|
106
|
-
|
|
115
|
+
buf->st_size = strlen(target);
|
|
116
|
+
}
|
|
107
117
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
*/
|
|
111
|
-
namelen = strlen(file_name);
|
|
112
|
-
if (namelen && file_name[namelen-1] != '/')
|
|
113
|
-
return -1;
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
114
120
|
|
|
115
|
-
|
|
116
|
-
--namelen;
|
|
121
|
+
errno = ENOENT;
|
|
117
122
|
|
|
118
|
-
|
|
119
|
-
|
|
123
|
+
/* We need POSIX behavior, then ENOTDIR must set when any of the folders in the
|
|
124
|
+
* file path is a regular file,otherwise ENOENT must be set.
|
|
125
|
+
*/
|
|
126
|
+
if (posix_enotdir) {
|
|
127
|
+
/* scan up path until we find an existing item */
|
|
128
|
+
while (1) {
|
|
129
|
+
/* remove last directory component */
|
|
130
|
+
for (--flen; flen > 0 && !WIN32_IS_WSEP(fbuf[flen]); --flen);
|
|
131
|
+
|
|
132
|
+
if (flen <= 0)
|
|
133
|
+
break;
|
|
134
|
+
|
|
135
|
+
fbuf[flen] = L'\0';
|
|
136
|
+
|
|
137
|
+
if (GetFileAttributesExW(fbuf, GetFileExInfoStandard, &fdata)) {
|
|
138
|
+
if (!(fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
|
139
|
+
errno = ENOTDIR;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
120
144
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
return -1;
|
|
145
|
+
return -1;
|
|
146
|
+
}
|
|
124
147
|
|
|
125
|
-
|
|
148
|
+
int p_lstat(const char *filename, struct stat *buf)
|
|
149
|
+
{
|
|
150
|
+
return do_lstat(filename, buf, 0);
|
|
151
|
+
}
|
|
126
152
|
|
|
127
|
-
|
|
128
|
-
|
|
153
|
+
int p_lstat_posixly(const char *filename, struct stat *buf)
|
|
154
|
+
{
|
|
155
|
+
return do_lstat(filename, buf, 1);
|
|
129
156
|
}
|
|
130
157
|
|
|
131
158
|
int p_readlink(const char *link, char *target, size_t target_len)
|
|
@@ -145,10 +172,10 @@ int p_readlink(const char *link, char *target, size_t target_len)
|
|
|
145
172
|
* it is not available in platforms older than Vista
|
|
146
173
|
*/
|
|
147
174
|
if (pGetFinalPath == NULL) {
|
|
148
|
-
|
|
175
|
+
HMODULE module = GetModuleHandle("kernel32");
|
|
149
176
|
|
|
150
|
-
if (
|
|
151
|
-
pGetFinalPath = (fpath_func)GetProcAddress(
|
|
177
|
+
if (module != NULL)
|
|
178
|
+
pGetFinalPath = (fpath_func)GetProcAddress(module, "GetFinalPathNameByHandleW");
|
|
152
179
|
|
|
153
180
|
if (pGetFinalPath == NULL) {
|
|
154
181
|
giterr_set(GITERR_OS,
|
|
@@ -268,7 +295,7 @@ int p_getcwd(char *buffer_out, size_t size)
|
|
|
268
295
|
|
|
269
296
|
int p_stat(const char* path, struct stat* buf)
|
|
270
297
|
{
|
|
271
|
-
return do_lstat(path, buf);
|
|
298
|
+
return do_lstat(path, buf, 0);
|
|
272
299
|
}
|
|
273
300
|
|
|
274
301
|
int p_chdir(const char* path)
|
|
@@ -301,46 +328,42 @@ int p_hide_directory__w32(const char *path)
|
|
|
301
328
|
|
|
302
329
|
char *p_realpath(const char *orig_path, char *buffer)
|
|
303
330
|
{
|
|
304
|
-
int ret
|
|
331
|
+
int ret;
|
|
305
332
|
wchar_t orig_path_w[GIT_WIN_PATH];
|
|
306
333
|
wchar_t buffer_w[GIT_WIN_PATH];
|
|
307
334
|
|
|
308
335
|
git__utf8_to_16(orig_path_w, GIT_WIN_PATH, orig_path);
|
|
336
|
+
|
|
337
|
+
/* Implicitly use GetCurrentDirectory which can be a threading issue */
|
|
309
338
|
ret = GetFullPathNameW(orig_path_w, GIT_WIN_PATH, buffer_w, NULL);
|
|
310
339
|
|
|
311
340
|
/* According to MSDN, a return value equals to zero means a failure. */
|
|
312
|
-
if (ret == 0 || ret > GIT_WIN_PATH)
|
|
341
|
+
if (ret == 0 || ret > GIT_WIN_PATH)
|
|
342
|
+
buffer = NULL;
|
|
343
|
+
|
|
344
|
+
else if (GetFileAttributesW(buffer_w) == INVALID_FILE_ATTRIBUTES) {
|
|
313
345
|
buffer = NULL;
|
|
314
|
-
|
|
346
|
+
errno = ENOENT;
|
|
315
347
|
}
|
|
316
348
|
|
|
317
|
-
if (buffer == NULL) {
|
|
318
|
-
buffer_sz = WideCharToMultiByte(
|
|
349
|
+
else if (buffer == NULL) {
|
|
350
|
+
int buffer_sz = WideCharToMultiByte(
|
|
351
|
+
CP_UTF8, 0, buffer_w, -1, NULL, 0, NULL, NULL);
|
|
319
352
|
|
|
320
353
|
if (!buffer_sz ||
|
|
321
354
|
!(buffer = (char *)git__malloc(buffer_sz)) ||
|
|
322
|
-
!WideCharToMultiByte(
|
|
355
|
+
!WideCharToMultiByte(
|
|
356
|
+
CP_UTF8, 0, buffer_w, -1, buffer, buffer_sz, NULL, NULL))
|
|
323
357
|
{
|
|
324
358
|
git__free(buffer);
|
|
325
359
|
buffer = NULL;
|
|
326
|
-
goto done;
|
|
327
|
-
}
|
|
328
|
-
} else {
|
|
329
|
-
if (!WideCharToMultiByte(CP_UTF8, 0, buffer_w, -1, buffer, GIT_PATH_MAX, NULL, NULL)) {
|
|
330
|
-
buffer = NULL;
|
|
331
|
-
goto done;
|
|
332
360
|
}
|
|
333
361
|
}
|
|
334
362
|
|
|
335
|
-
if (!
|
|
336
|
-
|
|
337
|
-
git__free(buffer);
|
|
338
|
-
|
|
363
|
+
else if (!WideCharToMultiByte(
|
|
364
|
+
CP_UTF8, 0, buffer_w, -1, buffer, GIT_PATH_MAX, NULL, NULL))
|
|
339
365
|
buffer = NULL;
|
|
340
|
-
errno = ENOENT;
|
|
341
|
-
}
|
|
342
366
|
|
|
343
|
-
done:
|
|
344
367
|
if (buffer)
|
|
345
368
|
git_path_mkposix(buffer);
|
|
346
369
|
|
|
@@ -352,7 +375,8 @@ int p_vsnprintf(char *buffer, size_t count, const char *format, va_list argptr)
|
|
|
352
375
|
#ifdef _MSC_VER
|
|
353
376
|
int len;
|
|
354
377
|
|
|
355
|
-
if (count == 0 ||
|
|
378
|
+
if (count == 0 ||
|
|
379
|
+
(len = _vsnprintf_s(buffer, count, _TRUNCATE, format, argptr)) < 0)
|
|
356
380
|
return _vscprintf(format, argptr);
|
|
357
381
|
|
|
358
382
|
return len;
|
|
@@ -464,11 +488,14 @@ p_gmtime_r (const time_t *timer, struct tm *result)
|
|
|
464
488
|
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
|
|
465
489
|
#endif
|
|
466
490
|
|
|
491
|
+
#ifndef _TIMEZONE_DEFINED
|
|
492
|
+
#define _TIMEZONE_DEFINED
|
|
467
493
|
struct timezone
|
|
468
494
|
{
|
|
469
495
|
int tz_minuteswest; /* minutes W of Greenwich */
|
|
470
496
|
int tz_dsttime; /* type of dst correction */
|
|
471
497
|
};
|
|
498
|
+
#endif
|
|
472
499
|
|
|
473
500
|
int p_gettimeofday(struct timeval *tv, struct timezone *tz)
|
|
474
501
|
{
|
|
@@ -504,3 +531,45 @@ int p_gettimeofday(struct timeval *tv, struct timezone *tz)
|
|
|
504
531
|
|
|
505
532
|
return 0;
|
|
506
533
|
}
|
|
534
|
+
|
|
535
|
+
int p_inet_pton(int af, const char* src, void* dst)
|
|
536
|
+
{
|
|
537
|
+
union {
|
|
538
|
+
struct sockaddr_in6 sin6;
|
|
539
|
+
struct sockaddr_in sin;
|
|
540
|
+
} sa;
|
|
541
|
+
int srcsize;
|
|
542
|
+
|
|
543
|
+
switch(af)
|
|
544
|
+
{
|
|
545
|
+
case AF_INET:
|
|
546
|
+
sa.sin.sin_family = AF_INET;
|
|
547
|
+
srcsize = (int)sizeof(sa.sin);
|
|
548
|
+
break;
|
|
549
|
+
case AF_INET6:
|
|
550
|
+
sa.sin6.sin6_family = AF_INET6;
|
|
551
|
+
srcsize = (int)sizeof(sa.sin6);
|
|
552
|
+
break;
|
|
553
|
+
default:
|
|
554
|
+
errno = WSAEPFNOSUPPORT;
|
|
555
|
+
return -1;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
if (WSAStringToAddress((LPSTR)src, af, NULL, (struct sockaddr *) &sa, &srcsize) != 0)
|
|
559
|
+
{
|
|
560
|
+
errno = WSAGetLastError();
|
|
561
|
+
return -1;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
switch(af)
|
|
565
|
+
{
|
|
566
|
+
case AF_INET:
|
|
567
|
+
memcpy(dst, &sa.sin.sin_addr, sizeof(sa.sin.sin_addr));
|
|
568
|
+
break;
|
|
569
|
+
case AF_INET6:
|
|
570
|
+
memcpy(dst, &sa.sin6.sin6_addr, sizeof(sa.sin6.sin6_addr));
|
|
571
|
+
break;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
return 1;
|
|
575
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
#include "precompiled.h"
|
|
1
|
+
#include "precompiled.h"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -70,12 +70,12 @@ void git__utf8_to_16(wchar_t *dest, size_t length, const char *src)
|
|
|
70
70
|
}
|
|
71
71
|
#endif
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
int git__utf8_to_16(wchar_t *dest, size_t length, const char *src)
|
|
74
74
|
{
|
|
75
|
-
MultiByteToWideChar(CP_UTF8, 0, src, -1, dest, (int)length);
|
|
75
|
+
return MultiByteToWideChar(CP_UTF8, 0, src, -1, dest, (int)length);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
int git__utf16_to_8(char *out, const wchar_t *input)
|
|
79
79
|
{
|
|
80
|
-
WideCharToMultiByte(CP_UTF8, 0, input, -1, out, GIT_WIN_PATH, NULL, NULL);
|
|
80
|
+
return WideCharToMultiByte(CP_UTF8, 0, input, -1, out, GIT_WIN_PATH, NULL, NULL);
|
|
81
81
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
#define GIT_WIN_PATH (260 + 1)
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
int git__utf8_to_16(wchar_t *dest, size_t length, const char *src);
|
|
16
|
+
int git__utf16_to_8(char *dest, const wchar_t *src);
|
|
17
17
|
|
|
18
18
|
#endif
|
|
19
19
|
|