rugged 1.3.2.3 → 1.4.2
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.
- checksums.yaml +4 -4
- data/ext/rugged/extconf.rb +1 -1
- data/ext/rugged/rugged_config.c +7 -2
- data/ext/rugged/rugged_remote.c +17 -0
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +103 -276
- data/vendor/libgit2/COPYING +36 -19
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
- data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
- data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
- data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
- data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
- data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
- data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
- data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
- data/vendor/libgit2/cmake/FindPCRE.cmake +13 -13
- data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
- data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
- data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
- data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
- data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
- data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
- data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
- data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
- data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
- data/vendor/libgit2/cmake/SelectHashes.cmake +39 -49
- data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
- data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +31 -31
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +1 -1
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
- data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
- data/vendor/libgit2/deps/zlib/adler32.c +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +288 -975
- data/vendor/libgit2/deps/zlib/crc32.h +436 -9441
- data/vendor/libgit2/deps/zlib/deflate.c +31 -83
- data/vendor/libgit2/deps/zlib/deflate.h +15 -12
- data/vendor/libgit2/deps/zlib/gzguts.h +2 -3
- data/vendor/libgit2/deps/zlib/infback.c +1 -2
- data/vendor/libgit2/deps/zlib/inffast.c +14 -14
- data/vendor/libgit2/deps/zlib/inflate.c +8 -39
- data/vendor/libgit2/deps/zlib/inflate.h +2 -3
- data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
- data/vendor/libgit2/deps/zlib/trees.c +48 -27
- data/vendor/libgit2/deps/zlib/zlib.h +100 -126
- data/vendor/libgit2/deps/zlib/zutil.c +2 -2
- data/vendor/libgit2/deps/zlib/zutil.h +9 -12
- data/vendor/libgit2/include/git2/apply.h +16 -2
- data/vendor/libgit2/include/git2/attr.h +11 -2
- data/vendor/libgit2/include/git2/blame.h +4 -1
- data/vendor/libgit2/include/git2/blob.h +14 -1
- data/vendor/libgit2/include/git2/branch.h +2 -0
- data/vendor/libgit2/include/git2/buffer.h +18 -78
- data/vendor/libgit2/include/git2/cert.h +2 -2
- data/vendor/libgit2/include/git2/checkout.h +5 -2
- data/vendor/libgit2/include/git2/clone.h +3 -3
- data/vendor/libgit2/include/git2/commit.h +2 -0
- data/vendor/libgit2/include/git2/common.h +5 -12
- data/vendor/libgit2/include/git2/config.h +19 -3
- data/vendor/libgit2/include/git2/credential.h +2 -1
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +1 -1
- data/vendor/libgit2/include/git2/describe.h +7 -2
- data/vendor/libgit2/include/git2/diff.h +17 -9
- data/vendor/libgit2/include/git2/email.h +1 -1
- data/vendor/libgit2/include/git2/errors.h +1 -2
- data/vendor/libgit2/include/git2/filter.h +7 -2
- data/vendor/libgit2/include/git2/graph.h +1 -0
- data/vendor/libgit2/include/git2/ignore.h +1 -1
- data/vendor/libgit2/include/git2/index.h +11 -5
- data/vendor/libgit2/include/git2/indexer.h +19 -0
- data/vendor/libgit2/include/git2/merge.h +23 -3
- data/vendor/libgit2/include/git2/message.h +2 -0
- data/vendor/libgit2/include/git2/object.h +23 -0
- data/vendor/libgit2/include/git2/odb.h +37 -7
- data/vendor/libgit2/include/git2/odb_backend.h +1 -1
- data/vendor/libgit2/include/git2/pack.h +24 -8
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/pathspec.h +1 -1
- data/vendor/libgit2/include/git2/proxy.h +1 -1
- data/vendor/libgit2/include/git2/rebase.h +9 -1
- data/vendor/libgit2/include/git2/refdb.h +3 -0
- data/vendor/libgit2/include/git2/reflog.h +1 -1
- data/vendor/libgit2/include/git2/refs.h +2 -2
- data/vendor/libgit2/include/git2/remote.h +184 -37
- data/vendor/libgit2/include/git2/repository.h +14 -9
- data/vendor/libgit2/include/git2/reset.h +2 -2
- data/vendor/libgit2/include/git2/revparse.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +4 -1
- data/vendor/libgit2/include/git2/signature.h +1 -1
- data/vendor/libgit2/include/git2/stash.h +3 -3
- data/vendor/libgit2/include/git2/status.h +9 -3
- data/vendor/libgit2/include/git2/submodule.h +7 -2
- data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
- data/vendor/libgit2/include/git2/sys/odb_backend.h +2 -5
- data/vendor/libgit2/include/git2/sys/remote.h +31 -0
- data/vendor/libgit2/include/git2/sys/stream.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +25 -34
- data/vendor/libgit2/include/git2/tag.h +1 -0
- data/vendor/libgit2/include/git2/tree.h +4 -3
- data/vendor/libgit2/include/git2/types.h +7 -7
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +12 -2
- data/vendor/libgit2/src/CMakeLists.txt +189 -315
- data/vendor/libgit2/src/annotated_commit.h +1 -1
- data/vendor/libgit2/src/apply.c +18 -18
- data/vendor/libgit2/src/apply.h +2 -2
- data/vendor/libgit2/src/attr.c +18 -18
- data/vendor/libgit2/src/attr_file.c +17 -17
- data/vendor/libgit2/src/attr_file.h +4 -4
- data/vendor/libgit2/src/attrcache.c +17 -12
- data/vendor/libgit2/src/blame_git.c +1 -1
- data/vendor/libgit2/src/blob.c +33 -26
- data/vendor/libgit2/src/blob.h +1 -1
- data/vendor/libgit2/src/branch.c +150 -109
- data/vendor/libgit2/src/branch.h +15 -3
- data/vendor/libgit2/src/buf.c +126 -0
- data/vendor/libgit2/src/buf.h +50 -0
- data/vendor/libgit2/src/cc-compat.h +1 -1
- data/vendor/libgit2/src/checkout.c +74 -68
- data/vendor/libgit2/src/cherrypick.c +10 -10
- data/vendor/libgit2/src/clone.c +66 -66
- data/vendor/libgit2/src/commit.c +128 -58
- data/vendor/libgit2/src/commit.h +24 -1
- data/vendor/libgit2/src/commit_graph.c +68 -53
- data/vendor/libgit2/src/commit_graph.h +10 -3
- data/vendor/libgit2/src/commit_list.c +2 -3
- data/vendor/libgit2/src/common.h +10 -3
- data/vendor/libgit2/src/config.c +99 -77
- data/vendor/libgit2/src/config.h +15 -2
- data/vendor/libgit2/src/config_file.c +103 -91
- data/vendor/libgit2/src/config_mem.c +9 -9
- data/vendor/libgit2/src/config_parse.c +27 -23
- data/vendor/libgit2/src/crlf.c +24 -21
- data/vendor/libgit2/src/date.c +10 -17
- data/vendor/libgit2/src/date.h +33 -0
- data/vendor/libgit2/src/describe.c +27 -19
- data/vendor/libgit2/src/diff.c +25 -8
- data/vendor/libgit2/src/diff.h +2 -4
- data/vendor/libgit2/src/diff_driver.c +34 -36
- data/vendor/libgit2/src/diff_driver.h +3 -3
- data/vendor/libgit2/src/diff_file.c +29 -20
- data/vendor/libgit2/src/diff_generate.c +30 -6
- data/vendor/libgit2/src/diff_generate.h +5 -3
- data/vendor/libgit2/src/diff_print.c +102 -95
- data/vendor/libgit2/src/diff_stats.c +40 -29
- data/vendor/libgit2/src/{message.h → diff_stats.h} +7 -6
- data/vendor/libgit2/src/diff_tform.c +9 -8
- data/vendor/libgit2/src/diff_xdiff.c +3 -8
- data/vendor/libgit2/src/email.c +54 -38
- data/vendor/libgit2/src/email.h +1 -1
- data/vendor/libgit2/src/errors.c +18 -18
- data/vendor/libgit2/src/features.h.in +6 -1
- data/vendor/libgit2/src/fetch.c +69 -24
- data/vendor/libgit2/src/fetch.h +1 -1
- data/vendor/libgit2/src/fetchhead.c +19 -19
- data/vendor/libgit2/src/filebuf.c +28 -28
- data/vendor/libgit2/src/filebuf.h +1 -1
- data/vendor/libgit2/src/filter.c +96 -52
- data/vendor/libgit2/src/filter.h +26 -5
- data/vendor/libgit2/src/fs_path.c +1912 -0
- data/vendor/libgit2/src/fs_path.h +752 -0
- data/vendor/libgit2/src/futils.c +91 -85
- data/vendor/libgit2/src/futils.h +26 -14
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +2 -2
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +2 -2
- data/vendor/libgit2/src/hash/sha1/generic.c +2 -2
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +2 -2
- data/vendor/libgit2/src/hash/sha1/openssl.c +2 -2
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +1 -1
- data/vendor/libgit2/src/hash/sha1/win32.c +6 -6
- data/vendor/libgit2/src/hash/sha1.h +3 -1
- data/vendor/libgit2/src/hash.c +67 -35
- data/vendor/libgit2/src/hash.h +12 -12
- data/vendor/libgit2/src/ident.c +18 -18
- data/vendor/libgit2/src/ignore.c +35 -34
- data/vendor/libgit2/src/ignore.h +2 -2
- data/vendor/libgit2/src/index.c +79 -80
- data/vendor/libgit2/src/index.h +6 -3
- data/vendor/libgit2/src/indexer.c +75 -57
- data/vendor/libgit2/src/iterator.c +64 -56
- data/vendor/libgit2/src/iterator.h +5 -5
- data/vendor/libgit2/src/khash.h +1 -1
- data/vendor/libgit2/src/libgit2.c +22 -19
- data/vendor/libgit2/src/mailmap.c +38 -36
- data/vendor/libgit2/src/merge.c +27 -27
- data/vendor/libgit2/src/merge.h +1 -14
- data/vendor/libgit2/src/merge_driver.c +2 -2
- data/vendor/libgit2/src/merge_file.c +13 -3
- data/vendor/libgit2/src/message.c +21 -10
- data/vendor/libgit2/src/midx.c +83 -66
- data/vendor/libgit2/src/midx.h +3 -3
- data/vendor/libgit2/src/mwindow.c +1 -1
- data/vendor/libgit2/src/net.c +278 -68
- data/vendor/libgit2/src/net.h +10 -3
- data/vendor/libgit2/src/netops.c +1 -1
- data/vendor/libgit2/src/netops.h +1 -1
- data/vendor/libgit2/src/notes.c +20 -29
- data/vendor/libgit2/src/object.c +49 -9
- data/vendor/libgit2/src/object.h +1 -1
- data/vendor/libgit2/src/odb.c +35 -32
- data/vendor/libgit2/src/odb.h +1 -1
- data/vendor/libgit2/src/odb_loose.c +68 -68
- data/vendor/libgit2/src/odb_mempack.c +18 -5
- data/vendor/libgit2/src/odb_pack.c +43 -43
- data/vendor/libgit2/src/oid.c +11 -4
- data/vendor/libgit2/src/oid.h +15 -0
- data/vendor/libgit2/src/pack-objects.c +41 -26
- data/vendor/libgit2/src/pack-objects.h +11 -6
- data/vendor/libgit2/src/pack.c +10 -10
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch.h +1 -0
- data/vendor/libgit2/src/patch_generate.c +27 -11
- data/vendor/libgit2/src/patch_generate.h +5 -5
- data/vendor/libgit2/src/patch_parse.c +24 -24
- data/vendor/libgit2/src/path.c +76 -1951
- data/vendor/libgit2/src/path.h +34 -741
- data/vendor/libgit2/src/pathspec.c +6 -6
- data/vendor/libgit2/src/pathspec.h +2 -2
- data/vendor/libgit2/src/posix.c +3 -3
- data/vendor/libgit2/src/posix.h +1 -0
- data/vendor/libgit2/src/pqueue.h +1 -1
- data/vendor/libgit2/src/proxy.c +4 -1
- data/vendor/libgit2/src/proxy.h +1 -1
- data/vendor/libgit2/src/push.c +30 -35
- data/vendor/libgit2/src/push.h +4 -16
- data/vendor/libgit2/src/rand.c +226 -0
- data/vendor/libgit2/src/rand.h +37 -0
- data/vendor/libgit2/src/reader.c +8 -8
- data/vendor/libgit2/src/reader.h +2 -2
- data/vendor/libgit2/src/rebase.c +89 -88
- data/vendor/libgit2/src/refdb_fs.c +447 -173
- data/vendor/libgit2/src/refs.c +32 -32
- data/vendor/libgit2/src/refs.h +2 -2
- data/vendor/libgit2/src/refspec.c +32 -37
- data/vendor/libgit2/src/refspec.h +5 -2
- data/vendor/libgit2/src/regexp.c +1 -1
- data/vendor/libgit2/src/remote.c +713 -419
- data/vendor/libgit2/src/remote.h +15 -10
- data/vendor/libgit2/src/repository.c +350 -467
- data/vendor/libgit2/src/repository.h +11 -10
- data/vendor/libgit2/src/reset.c +8 -5
- data/vendor/libgit2/src/revert.c +10 -10
- data/vendor/libgit2/src/revparse.c +48 -35
- data/vendor/libgit2/src/revwalk.c +7 -7
- data/vendor/libgit2/src/signature.c +12 -6
- data/vendor/libgit2/src/signature.h +1 -1
- data/vendor/libgit2/src/sortedcache.c +1 -1
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +36 -37
- data/vendor/libgit2/src/status.c +4 -1
- data/vendor/libgit2/src/{buffer.c → str.c} +157 -151
- data/vendor/libgit2/src/str.h +357 -0
- data/vendor/libgit2/src/streams/mbedtls.c +8 -6
- data/vendor/libgit2/src/streams/openssl_dynamic.h +3 -3
- data/vendor/libgit2/src/submodule.c +171 -159
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +68 -52
- data/vendor/libgit2/src/sysdir.h +15 -10
- data/vendor/libgit2/src/tag.c +29 -27
- data/vendor/libgit2/src/thread.h +3 -3
- data/vendor/libgit2/src/threadstate.c +3 -3
- data/vendor/libgit2/src/threadstate.h +1 -1
- data/vendor/libgit2/src/trace.c +1 -14
- data/vendor/libgit2/src/trace.h +5 -22
- data/vendor/libgit2/src/trailer.c +1 -1
- data/vendor/libgit2/src/transaction.c +1 -1
- data/vendor/libgit2/src/transport.c +10 -10
- data/vendor/libgit2/src/transports/auth.c +7 -9
- data/vendor/libgit2/src/transports/auth.h +2 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +12 -13
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -10
- data/vendor/libgit2/src/transports/auth_ntlm.h +0 -1
- data/vendor/libgit2/src/transports/git.c +9 -11
- data/vendor/libgit2/src/transports/http.c +37 -17
- data/vendor/libgit2/src/transports/http.h +2 -3
- data/vendor/libgit2/src/transports/httpclient.c +65 -65
- data/vendor/libgit2/src/transports/local.c +124 -116
- data/vendor/libgit2/src/transports/smart.c +51 -139
- data/vendor/libgit2/src/transports/smart.h +25 -31
- data/vendor/libgit2/src/transports/smart_pkt.c +33 -33
- data/vendor/libgit2/src/transports/smart_protocol.c +57 -39
- data/vendor/libgit2/src/transports/ssh.c +47 -112
- data/vendor/libgit2/src/transports/winhttp.c +50 -56
- data/vendor/libgit2/src/tree-cache.c +5 -5
- data/vendor/libgit2/src/tree-cache.h +2 -2
- data/vendor/libgit2/src/tree.c +59 -48
- data/vendor/libgit2/src/tree.h +1 -1
- data/vendor/libgit2/src/unix/map.c +0 -2
- data/vendor/libgit2/src/unix/posix.h +1 -4
- data/vendor/libgit2/src/unix/realpath.c +0 -2
- data/vendor/libgit2/src/util.c +14 -14
- data/vendor/libgit2/src/util.h +2 -28
- data/vendor/libgit2/src/vector.h +1 -1
- data/vendor/libgit2/src/win32/findfile.c +172 -116
- data/vendor/libgit2/src/win32/findfile.h +7 -4
- data/vendor/libgit2/src/win32/path_w32.c +140 -9
- data/vendor/libgit2/src/win32/path_w32.h +2 -0
- data/vendor/libgit2/src/win32/posix.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +11 -27
- data/vendor/libgit2/src/win32/w32_buffer.c +2 -3
- data/vendor/libgit2/src/win32/w32_buffer.h +2 -3
- data/vendor/libgit2/src/win32/w32_leakcheck.c +1 -1
- data/vendor/libgit2/src/worktree.c +116 -94
- data/vendor/libgit2/src/worktree.h +1 -1
- data/vendor/libgit2/src/xdiff/git-xdiff.h +53 -0
- data/vendor/libgit2/src/xdiff/xdiff.h +15 -15
- data/vendor/libgit2/src/xdiff/xdiffi.c +134 -108
- data/vendor/libgit2/src/xdiff/xemit.c +23 -7
- data/vendor/libgit2/src/xdiff/xhistogram.c +87 -78
- data/vendor/libgit2/src/xdiff/xinclude.h +1 -12
- data/vendor/libgit2/src/xdiff/xmerge.c +104 -117
- data/vendor/libgit2/src/xdiff/xpatience.c +6 -17
- data/vendor/libgit2/src/xdiff/xprepare.c +15 -20
- data/vendor/libgit2/src/xdiff/xutils.c +18 -7
- data/vendor/libgit2/src/zstream.c +5 -5
- data/vendor/libgit2/src/zstream.h +4 -4
- metadata +25 -10
- data/vendor/libgit2/src/buffer.h +0 -374
|
@@ -7,11 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
#include "submodule.h"
|
|
9
9
|
|
|
10
|
-
#include "
|
|
11
|
-
#include "
|
|
12
|
-
#include "git2/types.h"
|
|
13
|
-
#include "git2/index.h"
|
|
14
|
-
#include "buffer.h"
|
|
10
|
+
#include "buf.h"
|
|
11
|
+
#include "branch.h"
|
|
15
12
|
#include "vector.h"
|
|
16
13
|
#include "posix.h"
|
|
17
14
|
#include "config_backend.h"
|
|
@@ -19,10 +16,17 @@
|
|
|
19
16
|
#include "repository.h"
|
|
20
17
|
#include "tree.h"
|
|
21
18
|
#include "iterator.h"
|
|
22
|
-
#include "
|
|
19
|
+
#include "fs_path.h"
|
|
20
|
+
#include "str.h"
|
|
23
21
|
#include "index.h"
|
|
24
22
|
#include "worktree.h"
|
|
25
23
|
#include "clone.h"
|
|
24
|
+
#include "path.h"
|
|
25
|
+
|
|
26
|
+
#include "git2/config.h"
|
|
27
|
+
#include "git2/sys/config.h"
|
|
28
|
+
#include "git2/types.h"
|
|
29
|
+
#include "git2/index.h"
|
|
26
30
|
|
|
27
31
|
#define GIT_MODULES_FILE ".gitmodules"
|
|
28
32
|
|
|
@@ -57,14 +61,14 @@ enum {
|
|
|
57
61
|
};
|
|
58
62
|
enum {
|
|
59
63
|
GITMODULES_EXISTING = 0,
|
|
60
|
-
GITMODULES_CREATE = 1
|
|
64
|
+
GITMODULES_CREATE = 1
|
|
61
65
|
};
|
|
62
66
|
|
|
63
67
|
static int submodule_alloc(git_submodule **out, git_repository *repo, const char *name);
|
|
64
68
|
static git_config_backend *open_gitmodules(git_repository *repo, int gitmod);
|
|
65
69
|
static int gitmodules_snapshot(git_config **snap, git_repository *repo);
|
|
66
|
-
static int get_url_base(
|
|
67
|
-
static int lookup_head_remote_key(
|
|
70
|
+
static int get_url_base(git_str *url, git_repository *repo);
|
|
71
|
+
static int lookup_head_remote_key(git_str *remote_key, git_repository *repo);
|
|
68
72
|
static int lookup_default_remote(git_remote **remote, git_repository *repo);
|
|
69
73
|
static int submodule_load_each(const git_config_entry *entry, void *payload);
|
|
70
74
|
static int submodule_read_config(git_submodule *sm, git_config *cfg);
|
|
@@ -79,11 +83,11 @@ static int submodule_cmp(const void *a, const void *b)
|
|
|
79
83
|
return strcmp(((git_submodule *)a)->name, ((git_submodule *)b)->name);
|
|
80
84
|
}
|
|
81
85
|
|
|
82
|
-
static int submodule_config_key_trunc_puts(
|
|
86
|
+
static int submodule_config_key_trunc_puts(git_str *key, const char *suffix)
|
|
83
87
|
{
|
|
84
|
-
ssize_t idx =
|
|
85
|
-
|
|
86
|
-
return
|
|
88
|
+
ssize_t idx = git_str_rfind(key, '.');
|
|
89
|
+
git_str_truncate(key, (size_t)(idx + 1));
|
|
90
|
+
return git_str_puts(key, suffix);
|
|
87
91
|
}
|
|
88
92
|
|
|
89
93
|
/*
|
|
@@ -128,7 +132,7 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa
|
|
|
128
132
|
{
|
|
129
133
|
int error = 0;
|
|
130
134
|
git_index *index;
|
|
131
|
-
|
|
135
|
+
git_str dir = GIT_STR_INIT;
|
|
132
136
|
*occupied = false;
|
|
133
137
|
|
|
134
138
|
if ((error = git_repository_index__weakptr(&index, repo)) < 0)
|
|
@@ -143,10 +147,10 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa
|
|
|
143
147
|
goto out;
|
|
144
148
|
}
|
|
145
149
|
|
|
146
|
-
if ((error =
|
|
150
|
+
if ((error = git_str_sets(&dir, path)) < 0)
|
|
147
151
|
goto out;
|
|
148
152
|
|
|
149
|
-
if ((error =
|
|
153
|
+
if ((error = git_fs_path_to_dir(&dir)) < 0)
|
|
150
154
|
goto out;
|
|
151
155
|
|
|
152
156
|
if ((error = git_index_find_prefix(NULL, index, dir.ptr)) != GIT_ENOTFOUND) {
|
|
@@ -161,7 +165,7 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa
|
|
|
161
165
|
error = 0;
|
|
162
166
|
|
|
163
167
|
out:
|
|
164
|
-
|
|
168
|
+
git_str_dispose(&dir);
|
|
165
169
|
return error;
|
|
166
170
|
}
|
|
167
171
|
|
|
@@ -195,7 +199,7 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
195
199
|
const char *key = "submodule\\..*\\.path";
|
|
196
200
|
git_config_iterator *iter = NULL;
|
|
197
201
|
git_config_entry *entry;
|
|
198
|
-
|
|
202
|
+
git_str buf = GIT_STR_INIT;
|
|
199
203
|
git_strmap *names;
|
|
200
204
|
int isvalid, error;
|
|
201
205
|
|
|
@@ -219,8 +223,8 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
219
223
|
goto out;
|
|
220
224
|
}
|
|
221
225
|
|
|
222
|
-
|
|
223
|
-
|
|
226
|
+
git_str_clear(&buf);
|
|
227
|
+
git_str_put(&buf, fdot + 1, ldot - fdot - 1);
|
|
224
228
|
isvalid = git_submodule_name_is_valid(repo, buf.ptr, 0);
|
|
225
229
|
if (isvalid < 0) {
|
|
226
230
|
error = isvalid;
|
|
@@ -229,7 +233,7 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
229
233
|
if (!isvalid)
|
|
230
234
|
continue;
|
|
231
235
|
|
|
232
|
-
if ((error = git_strmap_set(names, git__strdup(entry->value),
|
|
236
|
+
if ((error = git_strmap_set(names, git__strdup(entry->value), git_str_detach(&buf))) < 0) {
|
|
233
237
|
git_error_set(GIT_ERROR_NOMEMORY, "error inserting submodule into hash table");
|
|
234
238
|
error = -1;
|
|
235
239
|
goto out;
|
|
@@ -243,7 +247,7 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
243
247
|
|
|
244
248
|
out:
|
|
245
249
|
free_submodule_names(names);
|
|
246
|
-
|
|
250
|
+
git_str_dispose(&buf);
|
|
247
251
|
git_config_iterator_free(iter);
|
|
248
252
|
return error;
|
|
249
253
|
}
|
|
@@ -329,10 +333,10 @@ int git_submodule__lookup_with_cache(
|
|
|
329
333
|
if (location == 0 || location == GIT_SUBMODULE_STATUS_IN_WD) {
|
|
330
334
|
git_config_backend *mods;
|
|
331
335
|
const char *pattern = "submodule\\..*\\.path";
|
|
332
|
-
|
|
336
|
+
git_str path = GIT_STR_INIT;
|
|
333
337
|
fbp_data data = { NULL, NULL };
|
|
334
338
|
|
|
335
|
-
|
|
339
|
+
git_str_puts(&path, name);
|
|
336
340
|
while (path.ptr[path.size-1] == '/') {
|
|
337
341
|
path.ptr[--path.size] = '\0';
|
|
338
342
|
}
|
|
@@ -347,14 +351,14 @@ int git_submodule__lookup_with_cache(
|
|
|
347
351
|
|
|
348
352
|
if (error < 0) {
|
|
349
353
|
git_submodule_free(sm);
|
|
350
|
-
|
|
354
|
+
git_str_dispose(&path);
|
|
351
355
|
return error;
|
|
352
356
|
}
|
|
353
357
|
|
|
354
358
|
if (data.name) {
|
|
355
359
|
git__free(sm->name);
|
|
356
360
|
sm->name = data.name;
|
|
357
|
-
sm->path =
|
|
361
|
+
sm->path = git_str_detach(&path);
|
|
358
362
|
|
|
359
363
|
/* Try to load again with the right name */
|
|
360
364
|
if ((error = git_submodule_reload(sm, false)) < 0) {
|
|
@@ -363,7 +367,7 @@ int git_submodule__lookup_with_cache(
|
|
|
363
367
|
}
|
|
364
368
|
}
|
|
365
369
|
|
|
366
|
-
|
|
370
|
+
git_str_dispose(&path);
|
|
367
371
|
}
|
|
368
372
|
|
|
369
373
|
if ((error = git_submodule_location(&location, sm)) < 0) {
|
|
@@ -378,17 +382,17 @@ int git_submodule__lookup_with_cache(
|
|
|
378
382
|
|
|
379
383
|
/* If it's not configured, we still check if there's a repo at the path */
|
|
380
384
|
if (git_repository_workdir(repo)) {
|
|
381
|
-
|
|
382
|
-
if (
|
|
385
|
+
git_str path = GIT_STR_INIT;
|
|
386
|
+
if (git_str_join3(&path, '/',
|
|
383
387
|
git_repository_workdir(repo),
|
|
384
388
|
name, DOT_GIT) < 0 ||
|
|
385
|
-
|
|
389
|
+
git_path_validate_str_length(NULL, &path) < 0)
|
|
386
390
|
return -1;
|
|
387
391
|
|
|
388
|
-
if (
|
|
392
|
+
if (git_fs_path_exists(path.ptr))
|
|
389
393
|
error = GIT_EEXISTS;
|
|
390
394
|
|
|
391
|
-
|
|
395
|
+
git_str_dispose(&path);
|
|
392
396
|
}
|
|
393
397
|
|
|
394
398
|
submodule_set_lookup_error(error, name);
|
|
@@ -405,22 +409,22 @@ int git_submodule__lookup_with_cache(
|
|
|
405
409
|
|
|
406
410
|
int git_submodule_name_is_valid(git_repository *repo, const char *name, int flags)
|
|
407
411
|
{
|
|
408
|
-
|
|
412
|
+
git_str buf = GIT_STR_INIT;
|
|
409
413
|
int error, isvalid;
|
|
410
414
|
|
|
411
415
|
if (flags == 0)
|
|
412
|
-
flags =
|
|
416
|
+
flags = GIT_FS_PATH_REJECT_FILESYSTEM_DEFAULTS;
|
|
413
417
|
|
|
414
418
|
/* Avoid allocating a new string if we can avoid it */
|
|
415
419
|
if (strchr(name, '\\') != NULL) {
|
|
416
|
-
if ((error =
|
|
420
|
+
if ((error = git_fs_path_normalize_slashes(&buf, name)) < 0)
|
|
417
421
|
return error;
|
|
418
422
|
} else {
|
|
419
|
-
|
|
423
|
+
git_str_attach_notowned(&buf, name, strlen(name));
|
|
420
424
|
}
|
|
421
425
|
|
|
422
|
-
isvalid =
|
|
423
|
-
|
|
426
|
+
isvalid = git_path_is_valid(repo, buf.ptr, 0, flags);
|
|
427
|
+
git_str_dispose(&buf);
|
|
424
428
|
|
|
425
429
|
return isvalid;
|
|
426
430
|
}
|
|
@@ -554,7 +558,7 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
|
554
558
|
int error = 0;
|
|
555
559
|
git_index *idx = NULL;
|
|
556
560
|
git_tree *head = NULL;
|
|
557
|
-
|
|
561
|
+
git_str path = GIT_STR_INIT;
|
|
558
562
|
git_submodule *sm;
|
|
559
563
|
git_config *mods = NULL;
|
|
560
564
|
bool has_workdir;
|
|
@@ -613,7 +617,7 @@ cleanup:
|
|
|
613
617
|
/* TODO: if we got an error, mark submodule config as invalid? */
|
|
614
618
|
git_index_free(idx);
|
|
615
619
|
git_tree_free(head);
|
|
616
|
-
|
|
620
|
+
git_str_dispose(&path);
|
|
617
621
|
return error;
|
|
618
622
|
}
|
|
619
623
|
|
|
@@ -682,7 +686,7 @@ static int submodule_repo_init(
|
|
|
682
686
|
bool use_gitlink)
|
|
683
687
|
{
|
|
684
688
|
int error = 0;
|
|
685
|
-
|
|
689
|
+
git_str workdir = GIT_STR_INIT, repodir = GIT_STR_INIT;
|
|
686
690
|
git_repository_init_options initopt = GIT_REPOSITORY_INIT_OPTIONS_INIT;
|
|
687
691
|
git_repository *subrepo = NULL;
|
|
688
692
|
|
|
@@ -701,10 +705,10 @@ static int submodule_repo_init(
|
|
|
701
705
|
* Old style: sub-repo goes directly into repo/<name>/.git/
|
|
702
706
|
*/
|
|
703
707
|
if (use_gitlink) {
|
|
704
|
-
error =
|
|
708
|
+
error = git_repository__item_path(&repodir, parent_repo, GIT_REPOSITORY_ITEM_MODULES);
|
|
705
709
|
if (error < 0)
|
|
706
710
|
goto cleanup;
|
|
707
|
-
error =
|
|
711
|
+
error = git_str_joinpath(&repodir, repodir.ptr, path);
|
|
708
712
|
if (error < 0)
|
|
709
713
|
goto cleanup;
|
|
710
714
|
|
|
@@ -718,14 +722,57 @@ static int submodule_repo_init(
|
|
|
718
722
|
error = git_repository_init_ext(&subrepo, workdir.ptr, &initopt);
|
|
719
723
|
|
|
720
724
|
cleanup:
|
|
721
|
-
|
|
722
|
-
|
|
725
|
+
git_str_dispose(&workdir);
|
|
726
|
+
git_str_dispose(&repodir);
|
|
723
727
|
|
|
724
728
|
*out = subrepo;
|
|
725
729
|
|
|
726
730
|
return error;
|
|
727
731
|
}
|
|
728
732
|
|
|
733
|
+
static int git_submodule__resolve_url(
|
|
734
|
+
git_str *out,
|
|
735
|
+
git_repository *repo,
|
|
736
|
+
const char *url)
|
|
737
|
+
{
|
|
738
|
+
int error = 0;
|
|
739
|
+
git_str normalized = GIT_STR_INIT;
|
|
740
|
+
|
|
741
|
+
GIT_ASSERT_ARG(out);
|
|
742
|
+
GIT_ASSERT_ARG(repo);
|
|
743
|
+
GIT_ASSERT_ARG(url);
|
|
744
|
+
|
|
745
|
+
/* We do this in all platforms in case someone on Windows created the .gitmodules */
|
|
746
|
+
if (strchr(url, '\\')) {
|
|
747
|
+
if ((error = git_fs_path_normalize_slashes(&normalized, url)) < 0)
|
|
748
|
+
return error;
|
|
749
|
+
|
|
750
|
+
url = normalized.ptr;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
if (git_fs_path_is_relative(url)) {
|
|
755
|
+
if (!(error = get_url_base(out, repo)))
|
|
756
|
+
error = git_fs_path_apply_relative(out, url);
|
|
757
|
+
} else if (strchr(url, ':') != NULL || url[0] == '/') {
|
|
758
|
+
error = git_str_sets(out, url);
|
|
759
|
+
} else {
|
|
760
|
+
git_error_set(GIT_ERROR_SUBMODULE, "invalid format for submodule URL");
|
|
761
|
+
error = -1;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
git_str_dispose(&normalized);
|
|
765
|
+
return error;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
int git_submodule_resolve_url(
|
|
769
|
+
git_buf *out,
|
|
770
|
+
git_repository *repo,
|
|
771
|
+
const char *url)
|
|
772
|
+
{
|
|
773
|
+
GIT_BUF_WRAP_PRIVATE(out, git_submodule__resolve_url, repo, url);
|
|
774
|
+
}
|
|
775
|
+
|
|
729
776
|
int git_submodule_add_setup(
|
|
730
777
|
git_submodule **out,
|
|
731
778
|
git_repository *repo,
|
|
@@ -736,7 +783,7 @@ int git_submodule_add_setup(
|
|
|
736
783
|
int error = 0;
|
|
737
784
|
git_config_backend *mods = NULL;
|
|
738
785
|
git_submodule *sm = NULL;
|
|
739
|
-
|
|
786
|
+
git_str name = GIT_STR_INIT, real_url = GIT_STR_INIT;
|
|
740
787
|
git_repository *subrepo = NULL;
|
|
741
788
|
bool path_occupied;
|
|
742
789
|
|
|
@@ -759,7 +806,7 @@ int git_submodule_add_setup(
|
|
|
759
806
|
if (git__prefixcmp(path, git_repository_workdir(repo)) == 0)
|
|
760
807
|
path += strlen(git_repository_workdir(repo));
|
|
761
808
|
|
|
762
|
-
if (
|
|
809
|
+
if (git_fs_path_root(path) >= 0) {
|
|
763
810
|
git_error_set(GIT_ERROR_SUBMODULE, "submodule path must be a relative path");
|
|
764
811
|
error = -1;
|
|
765
812
|
goto cleanup;
|
|
@@ -781,7 +828,7 @@ int git_submodule_add_setup(
|
|
|
781
828
|
return -1;
|
|
782
829
|
}
|
|
783
830
|
|
|
784
|
-
if ((error =
|
|
831
|
+
if ((error = git_str_printf(&name, "submodule.%s.path", path)) < 0 ||
|
|
785
832
|
(error = git_config_backend_set_string(mods, name.ptr, path)) < 0)
|
|
786
833
|
goto cleanup;
|
|
787
834
|
|
|
@@ -789,7 +836,7 @@ int git_submodule_add_setup(
|
|
|
789
836
|
(error = git_config_backend_set_string(mods, name.ptr, url)) < 0)
|
|
790
837
|
goto cleanup;
|
|
791
838
|
|
|
792
|
-
|
|
839
|
+
git_str_clear(&name);
|
|
793
840
|
|
|
794
841
|
/* init submodule repository and add origin remote as needed */
|
|
795
842
|
|
|
@@ -800,11 +847,11 @@ int git_submodule_add_setup(
|
|
|
800
847
|
/* if the repo does not already exist, then init a new repo and add it.
|
|
801
848
|
* Otherwise, just add the existing repo.
|
|
802
849
|
*/
|
|
803
|
-
if (!(
|
|
804
|
-
|
|
850
|
+
if (!(git_fs_path_exists(name.ptr) &&
|
|
851
|
+
git_fs_path_contains(&name, DOT_GIT))) {
|
|
805
852
|
|
|
806
853
|
/* resolve the actual URL to use */
|
|
807
|
-
if ((error =
|
|
854
|
+
if ((error = git_submodule__resolve_url(&real_url, repo, url)) < 0)
|
|
808
855
|
goto cleanup;
|
|
809
856
|
|
|
810
857
|
if ((error = submodule_repo_init(&subrepo, repo, path, real_url.ptr, use_gitlink)) < 0)
|
|
@@ -826,8 +873,8 @@ cleanup:
|
|
|
826
873
|
|
|
827
874
|
git_config_backend_free(mods);
|
|
828
875
|
git_repository_free(subrepo);
|
|
829
|
-
|
|
830
|
-
|
|
876
|
+
git_str_dispose(&real_url);
|
|
877
|
+
git_str_dispose(&name);
|
|
831
878
|
|
|
832
879
|
return error;
|
|
833
880
|
}
|
|
@@ -841,13 +888,13 @@ int git_submodule_repo_init(
|
|
|
841
888
|
git_repository *sub_repo = NULL;
|
|
842
889
|
const char *configured_url;
|
|
843
890
|
git_config *cfg = NULL;
|
|
844
|
-
|
|
891
|
+
git_str buf = GIT_STR_INIT;
|
|
845
892
|
|
|
846
893
|
GIT_ASSERT_ARG(out);
|
|
847
894
|
GIT_ASSERT_ARG(sm);
|
|
848
895
|
|
|
849
896
|
/* get the configured remote url of the submodule */
|
|
850
|
-
if ((error =
|
|
897
|
+
if ((error = git_str_printf(&buf, "submodule.%s.url", sm->name)) < 0 ||
|
|
851
898
|
(error = git_repository_config_snapshot(&cfg, sm->repo)) < 0 ||
|
|
852
899
|
(error = git_config_get_string(&configured_url, cfg, buf.ptr)) < 0 ||
|
|
853
900
|
(error = submodule_repo_init(&sub_repo, sm->repo, sm->path, configured_url, use_gitlink)) < 0)
|
|
@@ -857,7 +904,7 @@ int git_submodule_repo_init(
|
|
|
857
904
|
|
|
858
905
|
done:
|
|
859
906
|
git_config_free(cfg);
|
|
860
|
-
|
|
907
|
+
git_str_dispose(&buf);
|
|
861
908
|
return error;
|
|
862
909
|
}
|
|
863
910
|
|
|
@@ -881,7 +928,7 @@ int git_submodule_clone(git_repository **out, git_submodule *submodule, const gi
|
|
|
881
928
|
{
|
|
882
929
|
int error;
|
|
883
930
|
git_repository *clone;
|
|
884
|
-
|
|
931
|
+
git_str rel_path = GIT_STR_INIT;
|
|
885
932
|
git_submodule_update_options sub_opts = GIT_SUBMODULE_UPDATE_OPTIONS_INIT;
|
|
886
933
|
git_clone_options opts = GIT_CLONE_OPTIONS_INIT;
|
|
887
934
|
|
|
@@ -903,7 +950,7 @@ int git_submodule_clone(git_repository **out, git_submodule *submodule, const gi
|
|
|
903
950
|
if (error < 0)
|
|
904
951
|
goto cleanup;
|
|
905
952
|
|
|
906
|
-
error = git_clone__submodule(&clone, git_submodule_url(submodule),
|
|
953
|
+
error = git_clone__submodule(&clone, git_submodule_url(submodule), git_str_cstr(&rel_path), &opts);
|
|
907
954
|
if (error < 0)
|
|
908
955
|
goto cleanup;
|
|
909
956
|
|
|
@@ -913,7 +960,7 @@ int git_submodule_clone(git_repository **out, git_submodule *submodule, const gi
|
|
|
913
960
|
*out = clone;
|
|
914
961
|
|
|
915
962
|
cleanup:
|
|
916
|
-
|
|
963
|
+
git_str_dispose(&rel_path);
|
|
917
964
|
|
|
918
965
|
return error;
|
|
919
966
|
}
|
|
@@ -937,7 +984,7 @@ int git_submodule_add_to_index(git_submodule *sm, int write_index)
|
|
|
937
984
|
int error;
|
|
938
985
|
git_repository *sm_repo = NULL;
|
|
939
986
|
git_index *index;
|
|
940
|
-
|
|
987
|
+
git_str path = GIT_STR_INIT;
|
|
941
988
|
git_commit *head;
|
|
942
989
|
git_index_entry entry;
|
|
943
990
|
struct stat st;
|
|
@@ -997,7 +1044,7 @@ int git_submodule_add_to_index(git_submodule *sm, int write_index)
|
|
|
997
1044
|
|
|
998
1045
|
cleanup:
|
|
999
1046
|
git_repository_free(sm_repo);
|
|
1000
|
-
|
|
1047
|
+
git_str_dispose(&path);
|
|
1001
1048
|
return error;
|
|
1002
1049
|
}
|
|
1003
1050
|
|
|
@@ -1034,44 +1081,9 @@ const char *git_submodule_url(git_submodule *submodule)
|
|
|
1034
1081
|
return submodule->url;
|
|
1035
1082
|
}
|
|
1036
1083
|
|
|
1037
|
-
int git_submodule_resolve_url(git_buf *out, git_repository *repo, const char *url)
|
|
1038
|
-
{
|
|
1039
|
-
int error = 0;
|
|
1040
|
-
git_buf normalized = GIT_BUF_INIT;
|
|
1041
|
-
|
|
1042
|
-
GIT_ASSERT_ARG(out);
|
|
1043
|
-
GIT_ASSERT_ARG(repo);
|
|
1044
|
-
GIT_ASSERT_ARG(url);
|
|
1045
|
-
|
|
1046
|
-
if ((error = git_buf_sanitize(out)) < 0)
|
|
1047
|
-
return error;
|
|
1048
|
-
|
|
1049
|
-
/* We do this in all platforms in case someone on Windows created the .gitmodules */
|
|
1050
|
-
if (strchr(url, '\\')) {
|
|
1051
|
-
if ((error = git_path_normalize_slashes(&normalized, url)) < 0)
|
|
1052
|
-
return error;
|
|
1053
|
-
|
|
1054
|
-
url = normalized.ptr;
|
|
1055
|
-
}
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
if (git_path_is_relative(url)) {
|
|
1059
|
-
if (!(error = get_url_base(out, repo)))
|
|
1060
|
-
error = git_path_apply_relative(out, url);
|
|
1061
|
-
} else if (strchr(url, ':') != NULL || url[0] == '/') {
|
|
1062
|
-
error = git_buf_sets(out, url);
|
|
1063
|
-
} else {
|
|
1064
|
-
git_error_set(GIT_ERROR_SUBMODULE, "invalid format for submodule URL");
|
|
1065
|
-
error = -1;
|
|
1066
|
-
}
|
|
1067
|
-
|
|
1068
|
-
git_buf_dispose(&normalized);
|
|
1069
|
-
return error;
|
|
1070
|
-
}
|
|
1071
|
-
|
|
1072
1084
|
static int write_var(git_repository *repo, const char *name, const char *var, const char *val)
|
|
1073
1085
|
{
|
|
1074
|
-
|
|
1086
|
+
git_str key = GIT_STR_INIT;
|
|
1075
1087
|
git_config_backend *mods;
|
|
1076
1088
|
int error;
|
|
1077
1089
|
|
|
@@ -1079,7 +1091,7 @@ static int write_var(git_repository *repo, const char *name, const char *var, co
|
|
|
1079
1091
|
if (!mods)
|
|
1080
1092
|
return -1;
|
|
1081
1093
|
|
|
1082
|
-
if ((error =
|
|
1094
|
+
if ((error = git_str_printf(&key, "submodule.%s.%s", name, var)) < 0)
|
|
1083
1095
|
goto cleanup;
|
|
1084
1096
|
|
|
1085
1097
|
if (val)
|
|
@@ -1087,7 +1099,7 @@ static int write_var(git_repository *repo, const char *name, const char *var, co
|
|
|
1087
1099
|
else
|
|
1088
1100
|
error = git_config_backend_delete(mods, key.ptr);
|
|
1089
1101
|
|
|
1090
|
-
|
|
1102
|
+
git_str_dispose(&key);
|
|
1091
1103
|
|
|
1092
1104
|
cleanup:
|
|
1093
1105
|
git_config_backend_free(mods);
|
|
@@ -1227,7 +1239,7 @@ static int submodule_repo_create(
|
|
|
1227
1239
|
const char *path)
|
|
1228
1240
|
{
|
|
1229
1241
|
int error = 0;
|
|
1230
|
-
|
|
1242
|
+
git_str workdir = GIT_STR_INIT, repodir = GIT_STR_INIT;
|
|
1231
1243
|
git_repository_init_options initopt = GIT_REPOSITORY_INIT_OPTIONS_INIT;
|
|
1232
1244
|
git_repository *subrepo = NULL;
|
|
1233
1245
|
|
|
@@ -1249,18 +1261,18 @@ static int submodule_repo_create(
|
|
|
1249
1261
|
* <repo-dir>/modules/<name>/ with a gitlink in the
|
|
1250
1262
|
* sub-repo workdir directory to that repository.
|
|
1251
1263
|
*/
|
|
1252
|
-
error =
|
|
1264
|
+
error = git_repository__item_path(&repodir, parent_repo, GIT_REPOSITORY_ITEM_MODULES);
|
|
1253
1265
|
if (error < 0)
|
|
1254
1266
|
goto cleanup;
|
|
1255
|
-
error =
|
|
1267
|
+
error = git_str_joinpath(&repodir, repodir.ptr, path);
|
|
1256
1268
|
if (error < 0)
|
|
1257
1269
|
goto cleanup;
|
|
1258
1270
|
|
|
1259
1271
|
error = git_repository_init_ext(&subrepo, repodir.ptr, &initopt);
|
|
1260
1272
|
|
|
1261
1273
|
cleanup:
|
|
1262
|
-
|
|
1263
|
-
|
|
1274
|
+
git_str_dispose(&workdir);
|
|
1275
|
+
git_str_dispose(&repodir);
|
|
1264
1276
|
|
|
1265
1277
|
*out = subrepo;
|
|
1266
1278
|
|
|
@@ -1309,7 +1321,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1309
1321
|
git_repository *sub_repo = NULL;
|
|
1310
1322
|
git_remote *remote = NULL;
|
|
1311
1323
|
git_object *target_commit = NULL;
|
|
1312
|
-
|
|
1324
|
+
git_str buf = GIT_STR_INIT;
|
|
1313
1325
|
git_submodule_update_options update_options = GIT_SUBMODULE_UPDATE_OPTIONS_INIT;
|
|
1314
1326
|
git_clone_options clone_options = GIT_CLONE_OPTIONS_INIT;
|
|
1315
1327
|
|
|
@@ -1337,10 +1349,10 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1337
1349
|
* info has been copied into .git/config
|
|
1338
1350
|
*/
|
|
1339
1351
|
if ((error = git_repository_config_snapshot(&config, sm->repo)) < 0 ||
|
|
1340
|
-
(error =
|
|
1352
|
+
(error = git_str_printf(&buf, "submodule.%s.url", git_submodule_name(sm))) < 0)
|
|
1341
1353
|
goto done;
|
|
1342
1354
|
|
|
1343
|
-
if ((error = git_config_get_string(&submodule_url, config,
|
|
1355
|
+
if ((error = git_config_get_string(&submodule_url, config, git_str_cstr(&buf))) < 0) {
|
|
1344
1356
|
/*
|
|
1345
1357
|
* If the error is not "not found" or if it is "not found" and we are not
|
|
1346
1358
|
* initializing the submodule, then return error.
|
|
@@ -1362,7 +1374,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1362
1374
|
config = NULL;
|
|
1363
1375
|
|
|
1364
1376
|
if ((error = git_repository_config_snapshot(&config, sm->repo)) < 0 ||
|
|
1365
|
-
(error = git_config_get_string(&submodule_url, config,
|
|
1377
|
+
(error = git_config_get_string(&submodule_url, config, git_str_cstr(&buf))) < 0)
|
|
1366
1378
|
goto done;
|
|
1367
1379
|
}
|
|
1368
1380
|
|
|
@@ -1420,7 +1432,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1420
1432
|
}
|
|
1421
1433
|
|
|
1422
1434
|
done:
|
|
1423
|
-
|
|
1435
|
+
git_str_dispose(&buf);
|
|
1424
1436
|
git_config_free(config);
|
|
1425
1437
|
git_object_free(target_commit);
|
|
1426
1438
|
git_remote_free(remote);
|
|
@@ -1433,7 +1445,7 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
|
1433
1445
|
{
|
|
1434
1446
|
int error;
|
|
1435
1447
|
const char *val;
|
|
1436
|
-
|
|
1448
|
+
git_str key = GIT_STR_INIT, effective_submodule_url = GIT_STR_INIT;
|
|
1437
1449
|
git_config *cfg = NULL;
|
|
1438
1450
|
|
|
1439
1451
|
if (!sm->url) {
|
|
@@ -1447,8 +1459,8 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
|
1447
1459
|
|
|
1448
1460
|
/* write "submodule.NAME.url" */
|
|
1449
1461
|
|
|
1450
|
-
if ((error =
|
|
1451
|
-
(error =
|
|
1462
|
+
if ((error = git_submodule__resolve_url(&effective_submodule_url, sm->repo, sm->url)) < 0 ||
|
|
1463
|
+
(error = git_str_printf(&key, "submodule.%s.url", sm->name)) < 0 ||
|
|
1452
1464
|
(error = git_config__update_entry(
|
|
1453
1465
|
cfg, key.ptr, effective_submodule_url.ptr, overwrite != 0, false)) < 0)
|
|
1454
1466
|
goto cleanup;
|
|
@@ -1458,7 +1470,7 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
|
1458
1470
|
val = (sm->update == GIT_SUBMODULE_UPDATE_CHECKOUT) ?
|
|
1459
1471
|
NULL : submodule_update_to_str(sm->update);
|
|
1460
1472
|
|
|
1461
|
-
if ((error =
|
|
1473
|
+
if ((error = git_str_printf(&key, "submodule.%s.update", sm->name)) < 0 ||
|
|
1462
1474
|
(error = git_config__update_entry(
|
|
1463
1475
|
cfg, key.ptr, val, overwrite != 0, false)) < 0)
|
|
1464
1476
|
goto cleanup;
|
|
@@ -1467,15 +1479,15 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
|
1467
1479
|
|
|
1468
1480
|
cleanup:
|
|
1469
1481
|
git_config_free(cfg);
|
|
1470
|
-
|
|
1471
|
-
|
|
1482
|
+
git_str_dispose(&key);
|
|
1483
|
+
git_str_dispose(&effective_submodule_url);
|
|
1472
1484
|
|
|
1473
1485
|
return error;
|
|
1474
1486
|
}
|
|
1475
1487
|
|
|
1476
1488
|
int git_submodule_sync(git_submodule *sm)
|
|
1477
1489
|
{
|
|
1478
|
-
|
|
1490
|
+
git_str key = GIT_STR_INIT, url = GIT_STR_INIT, remote_name = GIT_STR_INIT;
|
|
1479
1491
|
git_repository *smrepo = NULL;
|
|
1480
1492
|
git_config *cfg = NULL;
|
|
1481
1493
|
int error = 0;
|
|
@@ -1487,8 +1499,8 @@ int git_submodule_sync(git_submodule *sm)
|
|
|
1487
1499
|
|
|
1488
1500
|
/* copy URL over to config only if it already exists */
|
|
1489
1501
|
if ((error = git_repository_config__weakptr(&cfg, sm->repo)) < 0 ||
|
|
1490
|
-
(error =
|
|
1491
|
-
(error =
|
|
1502
|
+
(error = git_str_printf(&key, "submodule.%s.url", sm->name)) < 0 ||
|
|
1503
|
+
(error = git_submodule__resolve_url(&url, sm->repo, sm->url)) < 0 ||
|
|
1492
1504
|
(error = git_config__update_entry(cfg, key.ptr, url.ptr, true, true)) < 0)
|
|
1493
1505
|
goto out;
|
|
1494
1506
|
|
|
@@ -1501,9 +1513,9 @@ int git_submodule_sync(git_submodule *sm)
|
|
|
1501
1513
|
goto out;
|
|
1502
1514
|
|
|
1503
1515
|
if (lookup_head_remote_key(&remote_name, smrepo) == 0) {
|
|
1504
|
-
if ((error =
|
|
1516
|
+
if ((error = git_str_join3(&key, '.', "remote", remote_name.ptr, "url")) < 0)
|
|
1505
1517
|
goto out;
|
|
1506
|
-
} else if ((error =
|
|
1518
|
+
} else if ((error = git_str_sets(&key, "remote.origin.url")) < 0) {
|
|
1507
1519
|
goto out;
|
|
1508
1520
|
}
|
|
1509
1521
|
|
|
@@ -1512,9 +1524,9 @@ int git_submodule_sync(git_submodule *sm)
|
|
|
1512
1524
|
|
|
1513
1525
|
out:
|
|
1514
1526
|
git_repository_free(smrepo);
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1527
|
+
git_str_dispose(&remote_name);
|
|
1528
|
+
git_str_dispose(&key);
|
|
1529
|
+
git_str_dispose(&url);
|
|
1518
1530
|
return error;
|
|
1519
1531
|
}
|
|
1520
1532
|
|
|
@@ -1522,7 +1534,7 @@ static int git_submodule__open(
|
|
|
1522
1534
|
git_repository **subrepo, git_submodule *sm, bool bare)
|
|
1523
1535
|
{
|
|
1524
1536
|
int error;
|
|
1525
|
-
|
|
1537
|
+
git_str path = GIT_STR_INIT;
|
|
1526
1538
|
unsigned int flags = GIT_REPOSITORY_OPEN_NO_SEARCH;
|
|
1527
1539
|
const char *wd;
|
|
1528
1540
|
|
|
@@ -1535,7 +1547,7 @@ static int git_submodule__open(
|
|
|
1535
1547
|
|
|
1536
1548
|
wd = git_repository_workdir(sm->repo);
|
|
1537
1549
|
|
|
1538
|
-
if (
|
|
1550
|
+
if (git_str_join3(&path, '/', wd, sm->path, DOT_GIT) < 0)
|
|
1539
1551
|
return -1;
|
|
1540
1552
|
|
|
1541
1553
|
sm->flags = sm->flags &
|
|
@@ -1557,17 +1569,17 @@ static int git_submodule__open(
|
|
|
1557
1569
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_OID_VALID;
|
|
1558
1570
|
else
|
|
1559
1571
|
git_error_clear();
|
|
1560
|
-
} else if (
|
|
1572
|
+
} else if (git_fs_path_exists(path.ptr)) {
|
|
1561
1573
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_SCANNED |
|
|
1562
1574
|
GIT_SUBMODULE_STATUS_IN_WD;
|
|
1563
1575
|
} else {
|
|
1564
|
-
|
|
1576
|
+
git_str_rtruncate_at_char(&path, '/'); /* remove "/.git" */
|
|
1565
1577
|
|
|
1566
|
-
if (
|
|
1578
|
+
if (git_fs_path_isdir(path.ptr))
|
|
1567
1579
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_SCANNED;
|
|
1568
1580
|
}
|
|
1569
1581
|
|
|
1570
|
-
|
|
1582
|
+
git_str_dispose(&path);
|
|
1571
1583
|
|
|
1572
1584
|
return error;
|
|
1573
1585
|
}
|
|
@@ -1921,13 +1933,13 @@ static int submodule_parse_recurse(git_submodule_recurse_t *out, const char *val
|
|
|
1921
1933
|
return 0;
|
|
1922
1934
|
}
|
|
1923
1935
|
|
|
1924
|
-
static int get_value(const char **out, git_config *cfg,
|
|
1936
|
+
static int get_value(const char **out, git_config *cfg, git_str *buf, const char *name, const char *field)
|
|
1925
1937
|
{
|
|
1926
1938
|
int error;
|
|
1927
1939
|
|
|
1928
|
-
|
|
1940
|
+
git_str_clear(buf);
|
|
1929
1941
|
|
|
1930
|
-
if ((error =
|
|
1942
|
+
if ((error = git_str_printf(buf, "submodule.%s.%s", name, field)) < 0 ||
|
|
1931
1943
|
(error = git_config_get_string(out, cfg, buf->ptr)) < 0)
|
|
1932
1944
|
return error;
|
|
1933
1945
|
|
|
@@ -1944,7 +1956,7 @@ static bool looks_like_command_line_option(const char *s)
|
|
|
1944
1956
|
|
|
1945
1957
|
static int submodule_read_config(git_submodule *sm, git_config *cfg)
|
|
1946
1958
|
{
|
|
1947
|
-
|
|
1959
|
+
git_str key = GIT_STR_INIT;
|
|
1948
1960
|
const char *value;
|
|
1949
1961
|
int error, in_config = 0;
|
|
1950
1962
|
|
|
@@ -2025,7 +2037,7 @@ static int submodule_read_config(git_submodule *sm, git_config *cfg)
|
|
|
2025
2037
|
error = 0;
|
|
2026
2038
|
|
|
2027
2039
|
cleanup:
|
|
2028
|
-
|
|
2040
|
+
git_str_dispose(&key);
|
|
2029
2041
|
return error;
|
|
2030
2042
|
}
|
|
2031
2043
|
|
|
@@ -2034,7 +2046,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2034
2046
|
lfc_data *data = payload;
|
|
2035
2047
|
const char *namestart, *property;
|
|
2036
2048
|
git_strmap *map = data->map;
|
|
2037
|
-
|
|
2049
|
+
git_str name = GIT_STR_INIT;
|
|
2038
2050
|
git_submodule *sm;
|
|
2039
2051
|
int error, isvalid;
|
|
2040
2052
|
|
|
@@ -2049,7 +2061,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2049
2061
|
|
|
2050
2062
|
property++;
|
|
2051
2063
|
|
|
2052
|
-
if ((error =
|
|
2064
|
+
if ((error = git_str_set(&name, namestart, property - namestart -1)) < 0)
|
|
2053
2065
|
return error;
|
|
2054
2066
|
|
|
2055
2067
|
isvalid = git_submodule_name_is_valid(data->repo, name.ptr, 0);
|
|
@@ -2083,24 +2095,24 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2083
2095
|
error = 0;
|
|
2084
2096
|
|
|
2085
2097
|
done:
|
|
2086
|
-
|
|
2098
|
+
git_str_dispose(&name);
|
|
2087
2099
|
return error;
|
|
2088
2100
|
}
|
|
2089
2101
|
|
|
2090
2102
|
static int submodule_load_from_wd_lite(git_submodule *sm)
|
|
2091
2103
|
{
|
|
2092
|
-
|
|
2104
|
+
git_str path = GIT_STR_INIT;
|
|
2093
2105
|
|
|
2094
2106
|
if (git_repository_workdir_path(&path, sm->repo, sm->path) < 0)
|
|
2095
2107
|
return -1;
|
|
2096
2108
|
|
|
2097
|
-
if (
|
|
2109
|
+
if (git_fs_path_isdir(path.ptr))
|
|
2098
2110
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_SCANNED;
|
|
2099
2111
|
|
|
2100
|
-
if (
|
|
2112
|
+
if (git_fs_path_contains(&path, DOT_GIT))
|
|
2101
2113
|
sm->flags |= GIT_SUBMODULE_STATUS_IN_WD;
|
|
2102
2114
|
|
|
2103
|
-
|
|
2115
|
+
git_str_dispose(&path);
|
|
2104
2116
|
return 0;
|
|
2105
2117
|
}
|
|
2106
2118
|
|
|
@@ -2112,7 +2124,7 @@ static int submodule_load_from_wd_lite(git_submodule *sm)
|
|
|
2112
2124
|
static int gitmodules_snapshot(git_config **snap, git_repository *repo)
|
|
2113
2125
|
{
|
|
2114
2126
|
git_config *mods = NULL;
|
|
2115
|
-
|
|
2127
|
+
git_str path = GIT_STR_INIT;
|
|
2116
2128
|
int error;
|
|
2117
2129
|
|
|
2118
2130
|
if (git_repository_workdir(repo) == NULL)
|
|
@@ -2123,7 +2135,7 @@ static int gitmodules_snapshot(git_config **snap, git_repository *repo)
|
|
|
2123
2135
|
|
|
2124
2136
|
if ((error = git_config_open_ondisk(&mods, path.ptr)) < 0)
|
|
2125
2137
|
goto cleanup;
|
|
2126
|
-
|
|
2138
|
+
git_str_dispose(&path);
|
|
2127
2139
|
|
|
2128
2140
|
if ((error = git_config_snapshot(snap, mods)) < 0)
|
|
2129
2141
|
goto cleanup;
|
|
@@ -2133,7 +2145,7 @@ static int gitmodules_snapshot(git_config **snap, git_repository *repo)
|
|
|
2133
2145
|
cleanup:
|
|
2134
2146
|
if (mods)
|
|
2135
2147
|
git_config_free(mods);
|
|
2136
|
-
|
|
2148
|
+
git_str_dispose(&path);
|
|
2137
2149
|
|
|
2138
2150
|
return error;
|
|
2139
2151
|
}
|
|
@@ -2142,14 +2154,14 @@ static git_config_backend *open_gitmodules(
|
|
|
2142
2154
|
git_repository *repo,
|
|
2143
2155
|
int okay_to_create)
|
|
2144
2156
|
{
|
|
2145
|
-
|
|
2157
|
+
git_str path = GIT_STR_INIT;
|
|
2146
2158
|
git_config_backend *mods = NULL;
|
|
2147
2159
|
|
|
2148
2160
|
if (git_repository_workdir(repo) != NULL) {
|
|
2149
2161
|
if (git_repository_workdir_path(&path, repo, GIT_MODULES_FILE) != 0)
|
|
2150
2162
|
return NULL;
|
|
2151
2163
|
|
|
2152
|
-
if (okay_to_create ||
|
|
2164
|
+
if (okay_to_create || git_fs_path_isfile(path.ptr)) {
|
|
2153
2165
|
/* git_config_backend_from_file should only fail if OOM */
|
|
2154
2166
|
if (git_config_backend_from_file(&mods, path.ptr) < 0)
|
|
2155
2167
|
mods = NULL;
|
|
@@ -2161,17 +2173,17 @@ static git_config_backend *open_gitmodules(
|
|
|
2161
2173
|
}
|
|
2162
2174
|
}
|
|
2163
2175
|
|
|
2164
|
-
|
|
2176
|
+
git_str_dispose(&path);
|
|
2165
2177
|
|
|
2166
2178
|
return mods;
|
|
2167
2179
|
}
|
|
2168
2180
|
|
|
2169
2181
|
/* Lookup name of remote of the local tracking branch HEAD points to */
|
|
2170
|
-
static int lookup_head_remote_key(
|
|
2182
|
+
static int lookup_head_remote_key(git_str *remote_name, git_repository *repo)
|
|
2171
2183
|
{
|
|
2172
2184
|
int error;
|
|
2173
2185
|
git_reference *head = NULL;
|
|
2174
|
-
|
|
2186
|
+
git_str upstream_name = GIT_STR_INIT;
|
|
2175
2187
|
|
|
2176
2188
|
/* lookup and dereference HEAD */
|
|
2177
2189
|
if ((error = git_repository_head(&head, repo)) < 0)
|
|
@@ -2190,18 +2202,18 @@ static int lookup_head_remote_key(git_buf *remote_name, git_repository *repo)
|
|
|
2190
2202
|
}
|
|
2191
2203
|
|
|
2192
2204
|
/* lookup remote tracking branch of HEAD */
|
|
2193
|
-
if ((error =
|
|
2205
|
+
if ((error = git_branch__upstream_name(
|
|
2194
2206
|
&upstream_name,
|
|
2195
2207
|
repo,
|
|
2196
2208
|
git_reference_name(head))) < 0)
|
|
2197
2209
|
goto done;
|
|
2198
2210
|
|
|
2199
2211
|
/* lookup remote of remote tracking branch */
|
|
2200
|
-
if ((error =
|
|
2212
|
+
if ((error = git_branch__remote_name(remote_name, repo, upstream_name.ptr)) < 0)
|
|
2201
2213
|
goto done;
|
|
2202
2214
|
|
|
2203
2215
|
done:
|
|
2204
|
-
|
|
2216
|
+
git_str_dispose(&upstream_name);
|
|
2205
2217
|
git_reference_free(head);
|
|
2206
2218
|
|
|
2207
2219
|
return error;
|
|
@@ -2211,13 +2223,13 @@ done:
|
|
|
2211
2223
|
static int lookup_head_remote(git_remote **remote, git_repository *repo)
|
|
2212
2224
|
{
|
|
2213
2225
|
int error;
|
|
2214
|
-
|
|
2226
|
+
git_str remote_name = GIT_STR_INIT;
|
|
2215
2227
|
|
|
2216
2228
|
/* lookup remote of remote tracking branch name */
|
|
2217
2229
|
if (!(error = lookup_head_remote_key(&remote_name, repo)))
|
|
2218
2230
|
error = git_remote_lookup(remote, repo, remote_name.ptr);
|
|
2219
2231
|
|
|
2220
|
-
|
|
2232
|
+
git_str_dispose(&remote_name);
|
|
2221
2233
|
|
|
2222
2234
|
return error;
|
|
2223
2235
|
}
|
|
@@ -2240,14 +2252,14 @@ static int lookup_default_remote(git_remote **remote, git_repository *repo)
|
|
|
2240
2252
|
return error;
|
|
2241
2253
|
}
|
|
2242
2254
|
|
|
2243
|
-
static int get_url_base(
|
|
2255
|
+
static int get_url_base(git_str *url, git_repository *repo)
|
|
2244
2256
|
{
|
|
2245
2257
|
int error;
|
|
2246
2258
|
git_worktree *wt = NULL;
|
|
2247
2259
|
git_remote *remote = NULL;
|
|
2248
2260
|
|
|
2249
2261
|
if ((error = lookup_default_remote(&remote, repo)) == 0) {
|
|
2250
|
-
error =
|
|
2262
|
+
error = git_str_sets(url, git_remote_url(remote));
|
|
2251
2263
|
goto out;
|
|
2252
2264
|
} else if (error != GIT_ENOTFOUND)
|
|
2253
2265
|
goto out;
|
|
@@ -2258,9 +2270,9 @@ static int get_url_base(git_buf *url, git_repository *repo)
|
|
|
2258
2270
|
if (git_repository_is_worktree(repo)) {
|
|
2259
2271
|
if ((error = git_worktree_open_from_repository(&wt, repo)) < 0)
|
|
2260
2272
|
goto out;
|
|
2261
|
-
error =
|
|
2273
|
+
error = git_str_sets(url, wt->parent_path);
|
|
2262
2274
|
} else {
|
|
2263
|
-
error =
|
|
2275
|
+
error = git_str_sets(url, git_repository_workdir(repo));
|
|
2264
2276
|
}
|
|
2265
2277
|
|
|
2266
2278
|
out:
|