rugged 0.24.0b3 → 0.24.0b4
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/rugged_repo.c +6 -1
- data/ext/rugged/rugged_tree.c +7 -0
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/include/git2/common.h +8 -6
- data/vendor/libgit2/include/git2/config.h +19 -5
- data/vendor/libgit2/include/git2/errors.h +1 -0
- data/vendor/libgit2/include/git2/merge.h +7 -0
- data/vendor/libgit2/src/config.c +10 -0
- data/vendor/libgit2/src/config.h +1 -0
- data/vendor/libgit2/src/diff.c +3 -1
- data/vendor/libgit2/src/merge.c +8 -1
- data/vendor/libgit2/src/repository.c +12 -2
- data/vendor/libgit2/src/sysdir.c +18 -1
- data/vendor/libgit2/src/sysdir.h +12 -2
- data/vendor/libgit2/src/win32/findfile.c +10 -0
- data/vendor/libgit2/src/win32/findfile.h +1 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1a251ffaf27a3d8447d1c970d5e537a3b36cf31
|
4
|
+
data.tar.gz: 432c8fee3c8af31b9878a98f243d2257b8b81208
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23b487a868376093f2ef9c60e3b771c51b88fd9b40b2b5ff335462950be29833b1bbc197760fad7c25d3ed66bac5988faae145e5a3eb2be15288ae777c9e0c5a
|
7
|
+
data.tar.gz: 9d648ed4cf886ad0c217561519dfb74f7a665ac9c3be75719fafd23b2a911ed367ba4a82a162b8c7467ff5fd4cde178e657a778e1fa9dd3daf26bb3aed526cd2
|
data/ext/rugged/rugged_repo.c
CHANGED
@@ -846,6 +846,7 @@ static VALUE rb_git_repo_merge_commits(int argc, VALUE *argv, VALUE self)
|
|
846
846
|
git_index *index;
|
847
847
|
git_repository *repo;
|
848
848
|
git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
|
849
|
+
int error;
|
849
850
|
|
850
851
|
rb_scan_args(argc, argv, "20:", &rb_our_commit, &rb_their_commit, &rb_options);
|
851
852
|
|
@@ -874,7 +875,11 @@ static VALUE rb_git_repo_merge_commits(int argc, VALUE *argv, VALUE self)
|
|
874
875
|
Data_Get_Struct(rb_our_commit, git_commit, our_commit);
|
875
876
|
Data_Get_Struct(rb_their_commit, git_commit, their_commit);
|
876
877
|
|
877
|
-
|
878
|
+
error = git_merge_commits(&index, repo, our_commit, their_commit, &opts);
|
879
|
+
if (error == GIT_EMERGECONFLICT)
|
880
|
+
return Qnil;
|
881
|
+
|
882
|
+
rugged_exception_check(error);
|
878
883
|
|
879
884
|
return rugged_index_new(rb_cRuggedIndex, self, index);
|
880
885
|
}
|
data/ext/rugged/rugged_tree.c
CHANGED
@@ -616,6 +616,10 @@ void rugged_parse_merge_options(git_merge_options *opts, VALUE rb_options)
|
|
616
616
|
if (RTEST(rb_hash_aref(rb_options, CSTR2SYM("renames")))) {
|
617
617
|
opts->tree_flags |= GIT_MERGE_TREE_FIND_RENAMES;
|
618
618
|
}
|
619
|
+
|
620
|
+
if (RTEST(rb_hash_aref(rb_options, CSTR2SYM("fail_on_conflict")))) {
|
621
|
+
opts->tree_flags |= GIT_MERGE_TREE_FAIL_ON_CONFLICT;
|
622
|
+
}
|
619
623
|
}
|
620
624
|
}
|
621
625
|
|
@@ -682,6 +686,9 @@ static VALUE rb_git_tree_merge(int argc, VALUE *argv, VALUE self)
|
|
682
686
|
ancestor_tree = NULL;
|
683
687
|
|
684
688
|
error = git_merge_trees(&index, repo, ancestor_tree, tree, other_tree, &opts);
|
689
|
+
if (error == GIT_EMERGECONFLICT)
|
690
|
+
return Qnil;
|
691
|
+
|
685
692
|
rugged_exception_check(error);
|
686
693
|
|
687
694
|
return rugged_index_new(rb_cRuggedIndex, rb_repo, index);
|
data/lib/rugged/version.rb
CHANGED
@@ -10,12 +10,6 @@
|
|
10
10
|
#include <time.h>
|
11
11
|
#include <stdlib.h>
|
12
12
|
|
13
|
-
#ifdef _MSC_VER
|
14
|
-
# include "inttypes.h"
|
15
|
-
#else
|
16
|
-
# include <inttypes.h>
|
17
|
-
#endif
|
18
|
-
|
19
13
|
#ifdef __cplusplus
|
20
14
|
# define GIT_BEGIN_DECL extern "C" {
|
21
15
|
# define GIT_END_DECL }
|
@@ -26,6 +20,14 @@
|
|
26
20
|
# define GIT_END_DECL /* empty */
|
27
21
|
#endif
|
28
22
|
|
23
|
+
#ifdef _MSC_VER
|
24
|
+
GIT_BEGIN_DECL
|
25
|
+
# include "inttypes.h"
|
26
|
+
GIT_END_DECL
|
27
|
+
#else
|
28
|
+
# include <inttypes.h>
|
29
|
+
#endif
|
30
|
+
|
29
31
|
/** Declare a public function exported for application use. */
|
30
32
|
#if __GNUC__ >= 4
|
31
33
|
# define GIT_EXTERN(type) extern \
|
@@ -29,25 +29,28 @@ GIT_BEGIN_DECL
|
|
29
29
|
* priority levels as well.
|
30
30
|
*/
|
31
31
|
typedef enum {
|
32
|
+
/** System-wide on Windows, for compatibility with portable git */
|
33
|
+
GIT_CONFIG_LEVEL_PROGRAMDATA = 1,
|
34
|
+
|
32
35
|
/** System-wide configuration file; /etc/gitconfig on Linux systems */
|
33
|
-
GIT_CONFIG_LEVEL_SYSTEM =
|
36
|
+
GIT_CONFIG_LEVEL_SYSTEM = 2,
|
34
37
|
|
35
38
|
/** XDG compatible configuration file; typically ~/.config/git/config */
|
36
|
-
GIT_CONFIG_LEVEL_XDG =
|
39
|
+
GIT_CONFIG_LEVEL_XDG = 3,
|
37
40
|
|
38
41
|
/** User-specific configuration file (also called Global configuration
|
39
42
|
* file); typically ~/.gitconfig
|
40
43
|
*/
|
41
|
-
GIT_CONFIG_LEVEL_GLOBAL =
|
44
|
+
GIT_CONFIG_LEVEL_GLOBAL = 4,
|
42
45
|
|
43
46
|
/** Repository specific configuration file; $WORK_DIR/.git/config on
|
44
47
|
* non-bare repos
|
45
48
|
*/
|
46
|
-
GIT_CONFIG_LEVEL_LOCAL =
|
49
|
+
GIT_CONFIG_LEVEL_LOCAL = 5,
|
47
50
|
|
48
51
|
/** Application specific configuration file; freely defined by applications
|
49
52
|
*/
|
50
|
-
GIT_CONFIG_LEVEL_APP =
|
53
|
+
GIT_CONFIG_LEVEL_APP = 6,
|
51
54
|
|
52
55
|
/** Represents the highest level available config file (i.e. the most
|
53
56
|
* specific config file available that actually is loaded)
|
@@ -141,6 +144,17 @@ GIT_EXTERN(int) git_config_find_xdg(git_buf *out);
|
|
141
144
|
*/
|
142
145
|
GIT_EXTERN(int) git_config_find_system(git_buf *out);
|
143
146
|
|
147
|
+
/**
|
148
|
+
* Locate the path to the configuration file in ProgramData
|
149
|
+
*
|
150
|
+
* Look for the file in %PROGRAMDATA%\Git\config used by portable git.
|
151
|
+
*
|
152
|
+
* @param out Pointer to a user-allocated git_buf in which to store the path
|
153
|
+
* @return 0 if a ProgramData configuration file has been
|
154
|
+
* found. Its path will be stored in `out`.
|
155
|
+
*/
|
156
|
+
GIT_EXTERN(int) git_config_find_programdata(git_buf *out);
|
157
|
+
|
144
158
|
/**
|
145
159
|
* Open the global, XDG and system configuration files
|
146
160
|
*
|
@@ -49,6 +49,7 @@ typedef enum {
|
|
49
49
|
GIT_EINVALID = -21, /**< Invalid operation or input */
|
50
50
|
GIT_EUNCOMMITTED = -22, /**< Uncommitted changes in index prevented operation */
|
51
51
|
GIT_EDIRECTORY = -23, /**< The operation is not valid for a directory */
|
52
|
+
GIT_EMERGECONFLICT = -24, /**< A merge conflict exists and cannot continue */
|
52
53
|
|
53
54
|
GIT_PASSTHROUGH = -30, /**< Internal only */
|
54
55
|
GIT_ITEROVER = -31, /**< Signals end of iteration with iterator */
|
@@ -72,6 +72,13 @@ typedef enum {
|
|
72
72
|
* the ability to merge between a modified and renamed file.
|
73
73
|
*/
|
74
74
|
GIT_MERGE_TREE_FIND_RENAMES = (1 << 0),
|
75
|
+
|
76
|
+
/**
|
77
|
+
* If a conflict occurs, exit immediately instead of attempting to
|
78
|
+
* continue resolving conflicts. The merge operation will fail with
|
79
|
+
* GIT_EMERGECONFLICT and no index will be returned.
|
80
|
+
*/
|
81
|
+
GIT_MERGE_TREE_FAIL_ON_CONFLICT = (1 << 1),
|
75
82
|
} git_merge_tree_flag_t;
|
76
83
|
|
77
84
|
/**
|
data/vendor/libgit2/src/config.c
CHANGED
@@ -1086,6 +1086,12 @@ int git_config_find_system(git_buf *path)
|
|
1086
1086
|
return git_sysdir_find_system_file(path, GIT_CONFIG_FILENAME_SYSTEM);
|
1087
1087
|
}
|
1088
1088
|
|
1089
|
+
int git_config_find_programdata(git_buf *path)
|
1090
|
+
{
|
1091
|
+
git_buf_sanitize(path);
|
1092
|
+
return git_sysdir_find_programdata_file(path, GIT_CONFIG_FILENAME_PROGRAMDATA);
|
1093
|
+
}
|
1094
|
+
|
1089
1095
|
int git_config__global_location(git_buf *buf)
|
1090
1096
|
{
|
1091
1097
|
const git_buf *paths;
|
@@ -1133,6 +1139,10 @@ int git_config_open_default(git_config **out)
|
|
1133
1139
|
error = git_config_add_file_ondisk(cfg, buf.ptr,
|
1134
1140
|
GIT_CONFIG_LEVEL_SYSTEM, 0);
|
1135
1141
|
|
1142
|
+
if (!error && !git_config_find_programdata(&buf))
|
1143
|
+
error = git_config_add_file_ondisk(cfg, buf.ptr,
|
1144
|
+
GIT_CONFIG_LEVEL_PROGRAMDATA, 0);
|
1145
|
+
|
1136
1146
|
git_buf_free(&buf);
|
1137
1147
|
|
1138
1148
|
if (error) {
|
data/vendor/libgit2/src/config.h
CHANGED
data/vendor/libgit2/src/diff.c
CHANGED
@@ -493,8 +493,10 @@ static int diff_list_apply_options(
|
|
493
493
|
|
494
494
|
/* Don't set GIT_DIFFCAPS_USE_DEV - compile time option in core git */
|
495
495
|
|
496
|
-
/*
|
496
|
+
/* Don't trust nanoseconds; we do not load nanos from disk */
|
497
|
+
#ifdef GIT_USE_NSEC
|
497
498
|
diff->diffcaps = diff->diffcaps | GIT_DIFFCAPS_TRUST_NANOSECS;
|
499
|
+
#endif
|
498
500
|
|
499
501
|
/* If not given explicit `opts`, check `diff.xyz` configs */
|
500
502
|
if (!opts) {
|
data/vendor/libgit2/src/merge.c
CHANGED
@@ -1701,8 +1701,15 @@ int git_merge__iterators(
|
|
1701
1701
|
if ((error = merge_conflict_resolve(&resolved, diff_list, conflict, opts.file_favor, opts.file_flags)) < 0)
|
1702
1702
|
goto done;
|
1703
1703
|
|
1704
|
-
if (!resolved)
|
1704
|
+
if (!resolved) {
|
1705
|
+
if ((opts.tree_flags & GIT_MERGE_TREE_FAIL_ON_CONFLICT)) {
|
1706
|
+
giterr_set(GITERR_MERGE, "merge conflicts exist");
|
1707
|
+
error = GIT_EMERGECONFLICT;
|
1708
|
+
goto done;
|
1709
|
+
}
|
1710
|
+
|
1705
1711
|
git_vector_insert(&diff_list->conflicts, conflict);
|
1712
|
+
}
|
1706
1713
|
}
|
1707
1714
|
|
1708
1715
|
if (!given_opts || !given_opts->metric)
|
@@ -585,7 +585,8 @@ static int load_config(
|
|
585
585
|
git_repository *repo,
|
586
586
|
const char *global_config_path,
|
587
587
|
const char *xdg_config_path,
|
588
|
-
const char *system_config_path
|
588
|
+
const char *system_config_path,
|
589
|
+
const char *programdata_path)
|
589
590
|
{
|
590
591
|
int error;
|
591
592
|
git_buf config_path = GIT_BUF_INIT;
|
@@ -626,6 +627,12 @@ static int load_config(
|
|
626
627
|
error != GIT_ENOTFOUND)
|
627
628
|
goto on_error;
|
628
629
|
|
630
|
+
if (programdata_path != NULL &&
|
631
|
+
(error = git_config_add_file_ondisk(
|
632
|
+
cfg, programdata_path, GIT_CONFIG_LEVEL_PROGRAMDATA, 0)) < 0 &&
|
633
|
+
error != GIT_ENOTFOUND)
|
634
|
+
goto on_error;
|
635
|
+
|
629
636
|
giterr_clear(); /* clear any lingering ENOTFOUND errors */
|
630
637
|
|
631
638
|
*out = cfg;
|
@@ -651,11 +658,13 @@ int git_repository_config__weakptr(git_config **out, git_repository *repo)
|
|
651
658
|
git_buf global_buf = GIT_BUF_INIT;
|
652
659
|
git_buf xdg_buf = GIT_BUF_INIT;
|
653
660
|
git_buf system_buf = GIT_BUF_INIT;
|
661
|
+
git_buf programdata_buf = GIT_BUF_INIT;
|
654
662
|
git_config *config;
|
655
663
|
|
656
664
|
git_config_find_global(&global_buf);
|
657
665
|
git_config_find_xdg(&xdg_buf);
|
658
666
|
git_config_find_system(&system_buf);
|
667
|
+
git_config_find_programdata(&programdata_buf);
|
659
668
|
|
660
669
|
/* If there is no global file, open a backend for it anyway */
|
661
670
|
if (git_buf_len(&global_buf) == 0)
|
@@ -665,7 +674,8 @@ int git_repository_config__weakptr(git_config **out, git_repository *repo)
|
|
665
674
|
&config, repo,
|
666
675
|
path_unless_empty(&global_buf),
|
667
676
|
path_unless_empty(&xdg_buf),
|
668
|
-
path_unless_empty(&system_buf)
|
677
|
+
path_unless_empty(&system_buf),
|
678
|
+
path_unless_empty(&programdata_buf));
|
669
679
|
if (!error) {
|
670
680
|
GIT_REFCOUNT_OWN(config, repo);
|
671
681
|
|
data/vendor/libgit2/src/sysdir.c
CHANGED
@@ -15,6 +15,16 @@
|
|
15
15
|
#include "win32/findfile.h"
|
16
16
|
#endif
|
17
17
|
|
18
|
+
static int git_sysdir_guess_programdata_dirs(git_buf *out)
|
19
|
+
{
|
20
|
+
#ifdef GIT_WIN32
|
21
|
+
return git_win32__find_programdata_dirs(out);
|
22
|
+
#else
|
23
|
+
git_buf_clear(out);
|
24
|
+
return 0;
|
25
|
+
#endif
|
26
|
+
}
|
27
|
+
|
18
28
|
static int git_sysdir_guess_system_dirs(git_buf *out)
|
19
29
|
{
|
20
30
|
#ifdef GIT_WIN32
|
@@ -76,12 +86,13 @@ static int git_sysdir_guess_template_dirs(git_buf *out)
|
|
76
86
|
typedef int (*git_sysdir_guess_cb)(git_buf *out);
|
77
87
|
|
78
88
|
static git_buf git_sysdir__dirs[GIT_SYSDIR__MAX] =
|
79
|
-
{ GIT_BUF_INIT, GIT_BUF_INIT, GIT_BUF_INIT, GIT_BUF_INIT };
|
89
|
+
{ GIT_BUF_INIT, GIT_BUF_INIT, GIT_BUF_INIT, GIT_BUF_INIT, GIT_BUF_INIT };
|
80
90
|
|
81
91
|
static git_sysdir_guess_cb git_sysdir__dir_guess[GIT_SYSDIR__MAX] = {
|
82
92
|
git_sysdir_guess_system_dirs,
|
83
93
|
git_sysdir_guess_global_dirs,
|
84
94
|
git_sysdir_guess_xdg_dirs,
|
95
|
+
git_sysdir_guess_programdata_dirs,
|
85
96
|
git_sysdir_guess_template_dirs,
|
86
97
|
};
|
87
98
|
|
@@ -258,6 +269,12 @@ int git_sysdir_find_xdg_file(git_buf *path, const char *filename)
|
|
258
269
|
path, filename, GIT_SYSDIR_XDG, "global/xdg");
|
259
270
|
}
|
260
271
|
|
272
|
+
int git_sysdir_find_programdata_file(git_buf *path, const char *filename)
|
273
|
+
{
|
274
|
+
return git_sysdir_find_in_dirlist(
|
275
|
+
path, filename, GIT_SYSDIR_PROGRAMDATA, "ProgramData");
|
276
|
+
}
|
277
|
+
|
261
278
|
int git_sysdir_find_template_dir(git_buf *path)
|
262
279
|
{
|
263
280
|
return git_sysdir_find_in_dirlist(
|
data/vendor/libgit2/src/sysdir.h
CHANGED
@@ -38,6 +38,15 @@ extern int git_sysdir_find_xdg_file(git_buf *path, const char *filename);
|
|
38
38
|
*/
|
39
39
|
extern int git_sysdir_find_system_file(git_buf *path, const char *filename);
|
40
40
|
|
41
|
+
/**
|
42
|
+
* Find a "ProgramData" file (i.e. one in %PROGRAMDATA%)
|
43
|
+
*
|
44
|
+
* @param path buffer to write the full path into
|
45
|
+
* @param filename name of file to find in the ProgramData directory
|
46
|
+
* @return 0 if found, GIT_ENOTFOUND if not found, or -1 on other OS error
|
47
|
+
*/
|
48
|
+
extern int git_sysdir_find_programdata_file(git_buf *path, const char *filename);
|
49
|
+
|
41
50
|
/**
|
42
51
|
* Find template directory.
|
43
52
|
*
|
@@ -50,8 +59,9 @@ typedef enum {
|
|
50
59
|
GIT_SYSDIR_SYSTEM = 0,
|
51
60
|
GIT_SYSDIR_GLOBAL = 1,
|
52
61
|
GIT_SYSDIR_XDG = 2,
|
53
|
-
|
54
|
-
|
62
|
+
GIT_SYSDIR_PROGRAMDATA = 3,
|
63
|
+
GIT_SYSDIR_TEMPLATE = 4,
|
64
|
+
GIT_SYSDIR__MAX = 5,
|
55
65
|
} git_sysdir_t;
|
56
66
|
|
57
67
|
/**
|
@@ -215,3 +215,13 @@ int git_win32__find_xdg_dirs(git_buf *out)
|
|
215
215
|
|
216
216
|
return win32_find_existing_dirs(out, global_tmpls);
|
217
217
|
}
|
218
|
+
|
219
|
+
int git_win32__find_programdata_dirs(git_buf *out)
|
220
|
+
{
|
221
|
+
static const wchar_t *programdata_tmpls[2] = {
|
222
|
+
L"%PROGRAMDATA%\\Git",
|
223
|
+
NULL,
|
224
|
+
};
|
225
|
+
|
226
|
+
return win32_find_existing_dirs(out, programdata_tmpls);
|
227
|
+
}
|
@@ -11,6 +11,7 @@
|
|
11
11
|
extern int git_win32__find_system_dirs(git_buf *out, const wchar_t *subpath);
|
12
12
|
extern int git_win32__find_global_dirs(git_buf *out);
|
13
13
|
extern int git_win32__find_xdg_dirs(git_buf *out);
|
14
|
+
extern int git_win32__find_programdata_dirs(git_buf *out);
|
14
15
|
|
15
16
|
#endif
|
16
17
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rugged
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.24.
|
4
|
+
version: 0.24.0b4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chacon
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-10-
|
12
|
+
date: 2015-10-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|
@@ -529,7 +529,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
529
529
|
version: 1.3.1
|
530
530
|
requirements: []
|
531
531
|
rubyforge_project:
|
532
|
-
rubygems_version: 2.2.
|
532
|
+
rubygems_version: 2.2.5
|
533
533
|
signing_key:
|
534
534
|
specification_version: 4
|
535
535
|
summary: Rugged is a Ruby binding to the libgit2 linkable library
|