Skip to content

Commit 5734768

Browse files
committed
Merge remote-tracking branch 'origin/master' into charliesome/trailer-info
2 parents f4f0e7e + f1323d9 commit 5734768

File tree

22 files changed

+157
-123
lines changed

22 files changed

+157
-123
lines changed

.travis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ env:
1717
- secure: "YnhS+8n6B+uoyaYfaJ3Lei7cSJqHDPiKJCKFIF2c87YDfmCvAJke8QtE7IzjYDs7UFkTCM4ox+ph2bERUrxZbSCyEkHdjIZpKuMJfYWja/jgMqTMxdyOH9y8JLFbZsSXDIXDwqBlC6vVyl1fP90M35wuWcNTs6tctfVWVofEFbs="
1818
- GITTEST_INVASIVE_FS_SIZE=1
1919
matrix:
20-
- OPTIONS="-DTHREADSAFE=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_WERROR=ON"
20+
- OPTIONS="-DTHREADSAFE=ON -DENABLE_TRACE=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_WERROR=ON"
2121
- OPTIONS="-DTHREADSAFE=OFF -DBUILD_EXAMPLES=ON -DENABLE_WERROR=ON"
2222

2323
dist: trusty
@@ -26,8 +26,8 @@ sudo: false
2626
addons:
2727
apt:
2828
sources:
29-
- sourceline: 'deb http://libgit2deps.edwardthomson.com trusty libgit2deps'
30-
key_url: 'https://www.edwardthomson.com/keys/ethomson@libgit2.org'
29+
- sourceline: 'deb https://dl.bintray.com/libgit2/ci-dependencies trusty libgit2deps'
30+
key_url: 'https://bintray.com/user/downloadSubjectPublicKey?username=bintray'
3131
packages:
3232
cmake
3333
curl

CMakeLists.txt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ OPTION( PROFILE "Generate profiling information" OFF )
4242
OPTION( ENABLE_TRACE "Enables tracing support" OFF )
4343
OPTION( LIBGIT2_FILENAME "Name of the produced binary" OFF )
4444

45-
OPTION( USE_SHA1DC "Use SHA-1 with collision detection" OFF )
45+
SET(SHA1_BACKEND "CollisionDetection" CACHE STRING "Backend to use for SHA1. One of Generic, OpenSSL, Win32, CommonCrypto, CollisionDetection. ")
4646
OPTION( USE_SSH "Link with libssh to enable SSH support" ON )
4747
OPTION( USE_HTTPS "Enable HTTPS support. Can be set to a specific backend" ON )
4848
OPTION( USE_GSSAPI "Link with libgssapi for SPNEGO auth" OFF )
@@ -222,10 +222,6 @@ IF (MSVC)
222222
SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}")
223223
SET(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL}")
224224
ELSE ()
225-
IF (NOT BUILD_SHARED_LIBS)
226-
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
227-
ENDIF()
228-
229225
IF (ENABLE_REPRODUCIBLE_BUILDS)
230226
SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Dqc <TARGET> <LINK_FLAGS> <OBJECTS>")
231227
SET(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> Dq <TARGET> <LINK_FLAGS> <OBJECTS>")
@@ -304,6 +300,12 @@ ENDIF()
304300
ADD_SUBDIRECTORY(src)
305301

306302
# Tests
303+
IF (NOT MSVC)
304+
IF (NOT BUILD_SHARED_LIBS)
305+
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
306+
ENDIF()
307+
ENDIF ()
308+
307309
IF (BUILD_CLAR)
308310
ENABLE_TESTING()
309311
ADD_SUBDIRECTORY(tests)
@@ -333,7 +335,8 @@ IF (BUILD_EXAMPLES)
333335
ENDIF ()
334336

335337
IF(CMAKE_VERSION VERSION_GREATER 3)
336-
FEATURE_SUMMARY(WHAT ENABLED_FEATURES DISABLED_FEATURES)
338+
FEATURE_SUMMARY(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
339+
FEATURE_SUMMARY(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
337340
ELSE()
338341
PRINT_ENABLED_FEATURES()
339342
PRINT_DISABLED_FEATURES()

appveyor.yml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,8 @@ test_script:
4848
# Run this early so we know it's ready by the time we need it
4949
$proxyJob = Start-Job { java -jar $Env:APPVEYOR_BUILD_FOLDER\build\poxyproxy.jar -d --port 8080 --credentials foo:bar }
5050
ctest -V -R libgit2_clar
51-
$env:GITTEST_REMOTE_URL="https://github.com/libgit2/non-existent"
52-
$env:GITTEST_REMOTE_USER="libgit2test"
53-
ctest -V -R libgit2_clar-cred_callback
5451
Receive-Job -Job $proxyJob
55-
$env:GITTEST_REMOTE_PROXY_URL = "http://foo:bar@localhost:8080"
56-
ctest -V -R libgit2_clar-proxy_credentials_in_url
57-
$env:GITTEST_REMOTE_PROXY_URL = "http://localhost:8080"
52+
$env:GITTEST_REMOTE_PROXY_URL = "localhost:8080"
5853
$env:GITTEST_REMOTE_PROXY_USER = "foo"
5954
$env:GITTEST_REMOTE_PROXY_PASS = "bar"
60-
ctest -V -R libgit2_clar-proxy_credentials_request
55+
ctest -V -R libgit2_clar-proxy_credentials

include/git2/tree.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -307,9 +307,10 @@ GIT_EXTERN(const git_tree_entry *) git_treebuilder_get(
307307
* pointer may not be valid past the next operation in this
308308
* builder. Duplicate the entry if you want to keep it.
309309
*
310-
* No attempt is being made to ensure that the provided oid points
311-
* to an existing git object in the object database, nor that the
312-
* attributes make sense regarding the type of the pointed at object.
310+
* By default the entry that you are inserting will be checked for
311+
* validity; that it exists in the object database and is of the
312+
* correct type. If you do not want this behavior, set the
313+
* `GIT_OPT_ENABLE_STRICT_OBJECT_CREATION` library option to false.
313314
*
314315
* @param out Pointer to store the entry (optional)
315316
* @param bld Tree builder

script/cibuild.sh

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -85,32 +85,18 @@ else
8585
export GITTEST_REMOTE_SSH_FINGERPRINT=$(ssh-keygen -F '[localhost]:2222' -l | tail -n 1 | cut -d ' ' -f 2 | tr -d ':')
8686
fi
8787

88+
# Use the SSH server
8889
export GITTEST_REMOTE_URL="ssh://localhost:2222/$HOME/_temp/test.git"
8990
export GITTEST_REMOTE_USER=$USER
9091
export GITTEST_REMOTE_SSH_KEY="$HOME/.ssh/id_rsa"
9192
export GITTEST_REMOTE_SSH_PUBKEY="$HOME/.ssh/id_rsa.pub"
9293
export GITTEST_REMOTE_SSH_PASSPHRASE=""
94+
ctest -V -R libgit2_clar-ssh || exit $?
9395

94-
95-
if [ -e ./libgit2_clar ]; then
96-
./libgit2_clar -sonline::push -sonline::clone::ssh_cert &&
97-
./libgit2_clar -sonline::clone::ssh_with_paths || exit $?
98-
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
99-
./libgit2_clar -sonline::clone::cred_callback || exit $?
100-
fi
101-
102-
# Use the proxy we started at the beginning
103-
export GITTEST_REMOTE_PROXY_URL="http://foo:bar@localhost:8080/"
104-
./libgit2_clar -sonline::clone::proxy_credentials_in_url || exit $?
105-
export GITTEST_REMOTE_PROXY_URL="http://localhost:8080/"
106-
export GITTEST_REMOTE_PROXY_USER="foo"
107-
export GITTEST_REMOTE_PROXY_PASS="bar"
108-
./libgit2_clar -sonline::clone::proxy_credentials_request || exit $?
109-
110-
fi
96+
# Use the proxy we started at the beginning
97+
export GITTEST_REMOTE_PROXY_URL="localhost:8080"
98+
export GITTEST_REMOTE_PROXY_USER="foo"
99+
export GITTEST_REMOTE_PROXY_PASS="bar"
100+
ctest -V -R libgit2_clar-proxy_credentials || exit $?
111101

112102
kill $(cat "$HOME/sshd/pid")
113-
114-
export GITTEST_REMOTE_URL="https://github.com/libgit2/non-existent"
115-
export GITTEST_REMOTE_USER="libgit2test"
116-
ctest -V -R libgit2_clar-cred_callback

src/CMakeLists.txt

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@ IF(DEBUG_POOL)
33
ENDIF()
44
ADD_FEATURE_INFO(debugpool GIT_DEBUG_POOL "debug pool allocator")
55

6-
# Add the features.h file as a dummy. This is required for Xcode
7-
# to successfully build the libgit2 library when using only
8-
# object libraries.
9-
SET(LIBGIT2_OBJECTS "${CMAKE_CURRENT_BINARY_DIR}/git2/sys/features.h")
10-
116
# This variable will contain the libraries we need to put into
127
# libgit2.pc's Requires.private. That is, what we're linking to or
138
# what someone who's statically linking us needs to link to.
@@ -127,10 +122,6 @@ ELSE ()
127122
PKG_CHECK_MODULES(CURL libcurl)
128123
ENDIF ()
129124

130-
IF (NOT AMIGA AND (USE_HTTPS STREQUAL "OpenSSL" OR USE_HTTPS STREQUAL "ON"))
131-
FIND_PACKAGE(OpenSSL QUIET)
132-
ENDIF ()
133-
134125
IF (CURL_FOUND)
135126
SET(GIT_CURL 1)
136127
LIST(APPEND LIBGIT2_INCLUDES ${CURL_INCLUDE_DIRS})
@@ -183,6 +174,8 @@ IF (USE_HTTPS)
183174
LIST(APPEND LIBGIT2_LIBS ${COREFOUNDATION_LIBRARIES} ${SECURITY_LIBRARIES})
184175
LIST(APPEND LIBGIT2_PC_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS})
185176
ELSEIF (HTTPS_BACKEND STREQUAL "OpenSSL")
177+
FIND_PACKAGE(OpenSSL)
178+
186179
IF (NOT OPENSSL_FOUND)
187180
MESSAGE(FATAL_ERROR "Asked for OpenSSL TLS backend, but it wasn't found")
188181
ENDIF()
@@ -191,6 +184,7 @@ IF (USE_HTTPS)
191184
LIST(APPEND LIBGIT2_INCLUDES ${OPENSSL_INCLUDE_DIR})
192185
LIST(APPEND LIBGIT2_LIBS ${OPENSSL_LIBRARIES})
193186
LIST(APPEND LIBGIT2_PC_LIBS ${OPENSSL_LDFLAGS})
187+
LIST(APPEND LIBGIT2_PC_REQUIRES "openssl")
194188
ELSEIF (HTTPS_BACKEND STREQUAL "WinHTTP")
195189
# WinHTTP setup was handled in the WinHTTP-specific block above
196190
ELSE()
@@ -204,34 +198,42 @@ ELSE()
204198
ENDIF()
205199

206200
# Specify sha1 implementation
207-
IF (USE_SHA1DC)
208-
ADD_FEATURE_INFO(SHA ON "using SHA1DC")
201+
IF(SHA1_BACKEND STREQUAL "OpenSSL")
202+
IF(NOT OPENSSL_FOUND)
203+
FIND_PACKAGE(OpenSSL)
204+
IF(NOT OPENSSL_FOUND)
205+
MESSAGE(FATAL_ERROR "Requested OpenSSL SHA1 backend, but OpenSSL could not be found")
206+
ENDIF()
207+
ENDIF()
208+
209+
ADD_FEATURE_INFO(SHA ON "using OpenSSL")
210+
SET(GIT_SHA1_OPENSSL 1)
211+
IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
212+
LIST(APPEND LIBGIT2_PC_LIBS "-lssl")
213+
ELSE()
214+
LIST(APPEND LIBGIT2_PC_REQUIRES "openssl")
215+
ENDIF()
216+
ELSEIF(SHA1_BACKEND STREQUAL "CollisionDetection")
217+
ADD_FEATURE_INFO(SHA ON "using CollisionDetection")
209218
SET(GIT_SHA1_COLLISIONDETECT 1)
210219
ADD_DEFINITIONS(-DSHA1DC_NO_STANDARD_INCLUDES=1)
211220
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"common.h\")
212221
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"common.h\")
213222
FILE(GLOB SRC_SHA1 hash/hash_collisiondetect.c hash/sha1dc/*)
214-
ELSEIF (WIN32 AND NOT MINGW)
215-
ADD_FEATURE_INFO(SHA ON "using SHA1_WIN32")
223+
ELSEIF(SHA1_BACKEND STREQUAL "Generic")
224+
ADD_FEATURE_INFO(SHA ON "using Generic")
225+
FILE(GLOB SRC_SHA1 hash/hash_generic.c)
226+
ELSEIF(SHA1_BACKEND STREQUAL "Win32")
227+
ADD_FEATURE_INFO(SHA ON "using Win32")
216228
SET(GIT_SHA1_WIN32 1)
217229
FILE(GLOB SRC_SHA1 hash/hash_win32.c)
218-
ELSEIF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
230+
ELSEIF(SHA1_BACKEND STREQUAL "CommonCrypto")
219231
ADD_FEATURE_INFO(SHA ON "using CommonCrypto")
220232
SET(GIT_SHA1_COMMON_CRYPTO 1)
221-
ELSEIF (OPENSSL_FOUND)
222-
ADD_FEATURE_INFO(SHA ON "using OpenSSL")
223-
SET(GIT_SHA1_OPENSSL 1)
224-
IF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
225-
LIST(APPEND LIBGIT2_PC_LIBS "-lssl")
226-
ELSE()
227-
SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} openssl")
228-
ENDIF ()
229233
ELSE()
230-
ADD_FEATURE_INFO(SHA ON "using generic")
231-
FILE(GLOB SRC_SHA1 hash/hash_generic.c)
234+
MESSAGE(FATAL_ERROR "Asked for unknown SHA1 backend ${SHA1_BACKEND}")
232235
ENDIF()
233236

234-
235237
# Include POSIX regex when it is required
236238
IF(WIN32 OR AMIGA OR CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
237239
ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/regex" "${libgit2_BINARY_DIR}/deps/regex")
@@ -264,7 +266,7 @@ IF(NOT USE_BUNDLED_ZLIB)
264266
LIST(APPEND LIBGIT2_LIBS "z")
265267
LIST(APPEND LIBGIT2_PC_LIBS "-lz")
266268
ELSE()
267-
SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} zlib")
269+
LIST(APPEND LIBGIT2_PC_REQUIRES "zlib")
268270
ENDIF()
269271
ADD_FEATURE_INFO(zlib ON "using system zlib")
270272
ELSE()
@@ -404,6 +406,13 @@ SET(LIBGIT2_INCLUDES ${LIBGIT2_INCLUDES} PARENT_SCOPE)
404406
SET(LIBGIT2_LIBS ${LIBGIT2_LIBS} PARENT_SCOPE)
405407
SET(LIBGIT2_LIBDIRS ${LIBGIT2_LIBDIRS} PARENT_SCOPE)
406408

409+
IF(XCODE_VERSION)
410+
# This is required for Xcode to actually link the libgit2 library
411+
# when using only object libraries.
412+
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dummy.c "")
413+
LIST(APPEND LIBGIT2_OBJECTS ${CMAKE_CURRENT_BINARY_DIR}/dummy.c)
414+
ENDIF()
415+
407416
# Compile and link libgit2
408417
LINK_DIRECTORIES(${LIBGIT2_LIBDIRS})
409418
ADD_LIBRARY(git2 ${WIN_RC} ${LIBGIT2_OBJECTS})
@@ -431,6 +440,9 @@ IF (SONAME)
431440
SET_TARGET_PROPERTIES(git2 PROPERTIES PREFIX "${LIBGIT2_PREFIX}")
432441
ENDIF()
433442
ENDIF()
443+
444+
LIST(REMOVE_DUPLICATES LIBGIT2_PC_REQUIRES)
445+
STRING(REPLACE ";" " " LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES}")
434446
STRING(REPLACE ";" " " LIBGIT2_PC_LIBS "${LIBGIT2_PC_LIBS}")
435447
CONFIGURE_FILE(${libgit2_SOURCE_DIR}/libgit2.pc.in ${libgit2_BINARY_DIR}/libgit2.pc @ONLY)
436448

src/diff.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ typedef enum {
3434
struct git_diff {
3535
git_refcount rc;
3636
git_repository *repo;
37+
git_attr_session attrsession;
3738
git_diff_origin_t type;
3839
git_diff_options opts;
3940
git_vector deltas; /* vector of git_diff_delta */

src/diff_driver.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -354,27 +354,30 @@ static int git_diff_driver_load(
354354
}
355355

356356
int git_diff_driver_lookup(
357-
git_diff_driver **out, git_repository *repo, const char *path)
357+
git_diff_driver **out, git_repository *repo,
358+
git_attr_session *attrsession, const char *path)
358359
{
359360
int error = 0;
360-
const char *value;
361+
const char *values[1], *attrs[] = { "diff" };
361362

362363
assert(out);
363364
*out = NULL;
364365

365366
if (!repo || !path || !strlen(path))
366367
/* just use the auto value */;
367-
else if ((error = git_attr_get(&value, repo, 0, path, "diff")) < 0)
368+
else if ((error = git_attr_get_many_with_session(values, repo,
369+
attrsession, 0, path, 1, attrs)) < 0)
368370
/* return error below */;
369-
else if (GIT_ATTR_UNSPECIFIED(value))
371+
372+
else if (GIT_ATTR_UNSPECIFIED(values[0]))
370373
/* just use the auto value */;
371-
else if (GIT_ATTR_FALSE(value))
374+
else if (GIT_ATTR_FALSE(values[0]))
372375
*out = &global_drivers[DIFF_DRIVER_BINARY];
373-
else if (GIT_ATTR_TRUE(value))
376+
else if (GIT_ATTR_TRUE(values[0]))
374377
*out = &global_drivers[DIFF_DRIVER_TEXT];
375378

376379
/* otherwise look for driver information in config and build driver */
377-
else if ((error = git_diff_driver_load(out, repo, value)) < 0) {
380+
else if ((error = git_diff_driver_load(out, repo, values[0])) < 0) {
378381
if (error == GIT_ENOTFOUND) {
379382
error = 0;
380383
giterr_clear();

src/diff_driver.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include "common.h"
1111

12+
#include "attr_file.h"
1213
#include "buffer.h"
1314

1415
typedef struct git_diff_driver_registry git_diff_driver_registry;
@@ -18,7 +19,8 @@ void git_diff_driver_registry_free(git_diff_driver_registry *);
1819

1920
typedef struct git_diff_driver git_diff_driver;
2021

21-
int git_diff_driver_lookup(git_diff_driver **, git_repository *, const char *);
22+
int git_diff_driver_lookup(git_diff_driver **, git_repository *,
23+
git_attr_session *attrsession, const char *);
2224
void git_diff_driver_free(git_diff_driver *);
2325

2426
/* diff option flags to force off and on for this driver */

src/diff_file.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ static int diff_file_content_init_common(
5454
fc->src = GIT_ITERATOR_TYPE_TREE;
5555

5656
if (!fc->driver &&
57-
git_diff_driver_lookup(&fc->driver, fc->repo, fc->file->path) < 0)
57+
git_diff_driver_lookup(&fc->driver, fc->repo,
58+
NULL, fc->file->path) < 0)
5859
return -1;
5960

6061
/* give driver a chance to modify options */
@@ -101,7 +102,8 @@ int git_diff_file_content__init_from_diff(
101102
fc->file = use_old ? &delta->old_file : &delta->new_file;
102103
fc->src = use_old ? diff->old_src : diff->new_src;
103104

104-
if (git_diff_driver_lookup(&fc->driver, fc->repo, fc->file->path) < 0)
105+
if (git_diff_driver_lookup(&fc->driver, fc->repo,
106+
&diff->attrsession, fc->file->path) < 0)
105107
return -1;
106108

107109
switch (delta->status) {

0 commit comments

Comments
 (0)