rugged 1.3.2.3 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|