Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
As the include depth increases, the chance of a realloc
increases. This means that whenever we run git_array_alloc() or call
config_parse(), we need to remember what our reader's index is so we
can look it up again.
|
|
When two or more variables of the same name exist and the user asks
for a scalar, we must return the latest value assign to it.
|
|
We need to refresh the variables from the included files if they are
changed, so loop over all included files and re-parse the files if any
of them has changed.
|
|
Relative, absolute and home-relative paths are supported. The
recursion limit it set at 10, just like in git.
|
|
Configuration iterators redux
|
|
Build it on top of the normal iterator instead, which lets use re-use
a lot of code.
|
|
|
|
As the name suggests, it iterates over all the entries
|
|
config: allow setting empty string as value
|
|
`git_config_set_string(config, "config.section", "")` fails when
escaping the value.
The buffer in `escape_value` is allocated without NULL-termination. And
in case of empty string 0 is passed for buffer size in `git_buf_grow`.
`git_buf_detach` returns NULL when the allocated size is 0 and that
leads to an error return in `GITERR_CHECK_ALLOC` called after
`escape_value`
The change in `config_file.c` was suggested by Russell Belfer <rb@github.com>
|
|
Make it look like the refs iterator API.
|
|
Implement the foreach version as a wrapper around the iterator.
|
|
The plain function will return an iterator, so move this one out of
the way.
|
|
Parse config headers that have the last quote on the
line quoted instead of walking off the end.
|
|
The old tests didn't try failing lookups or lookups across
multiple config files with some having the pattern and some
not having it.
|
|
The rules for which one to open is a bit silly, so let's make it
easier for our users.
|
|
When a repository is initialised, we need to probe to see if there is
a global config to load. If this is not the case, the user isn't able
to write to the global config without creating the backend and adding
it themselves, which is inconvenient and overly complex.
Unconditionally create and add a backend for the global config file
regardless of whether it exists as a convenience for users.
To enable this, we allow creating backends to files that do not exist
yet, changing the semantics somewhat, and making some tests invalid.
|
|
Revamp the refspec handling
|
|
Moving backend implementor objects into include/git2/sys so the
APIs can be isolated from the ones that normal libgit2 users
would be likely to use.
|
|
Adding a multivar when there are no variables with that name set
should set the variable instead of failing.
|
|
Passing NULL is non-sensical. The error message leaves to be desired,
though, as it leaks internal implementation details. Catch it at the
`git_config_set_string` level and set an appropriate error message.
|
|
This is @nulltoken's work to test various invalid config section
and key names and make sure we are validating properly.
|
|
Use cl_assert_equal_s() instead of strcmp().
|
|
Check whether the backslash at the end of the line is being escaped or
not so as not to consider it a continuation marker when it's e.g. a
Windows-style path.
|
|
Replaced all cl_assert(!strcmp()) or semantically equivalent forms
by cl_assert_equal_s().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Returning NULL for the string when we haven't signaled an error
condition is counter-intuitive and causes unnecessary edge
cases. Return an empty string when asking for a string value for a
configuration variable such as '[section] var' to avoid these edge
cases.
If the distinction between no value and an empty value is needed, this
can be retrieved from the entry directly. As a side-effect, this
change stops the int parsing functions from segfaulting on such a
variable.
|
|
'[section] variable' and '[section] variable =' behave differently
when parsed as booleans, so we need to store that distinction
internally.
|
|
We're already in the git_config namespace, there is no need to repeat
it.
|
|
|
|
|
|
This adds a new API that allows users to reload the config if the
file has changed on disk. A new config callback function to
refresh the config was added.
The modified time and file size are used to test if the file needs
to be reloaded (and are now stored in the disk backend object).
In writing tests, just using mtime was a problem / race, so I
wanted to check file size as well. To support that, I extended
`git_futils_readbuffer_updated` to optionally check file size in
addition to mtime, and I added a new function `git_filebuf_stats`
to fetch the mtime and size for an open filebuf (so that the
config could be easily refreshed after a write).
Lastly, I moved some similar file checking code for attributes
into filebuf. It is still only being used for attrs, but it
seems potentially reusable, so I thought I'd move it over.
|
|
|
|
|
|
Added `struct git_config_entry`: a git_config_entry contains the key, the value, and the config file level from which a config element was found.
Added `git_config_open_level`: build a single-level focused config object from a multi-level one.
We are now storing `git_config_entry`s in the khash of the config_file
|
|
This can occur after a manual modification of a config file.
|
|
The config file parser was not working right if there was no
whitespace between the value name and the equals sign. This
fixes that.
|
|
This updates all the `foreach()` type functions across the library
that take callbacks from the user to have a consistent behavior.
The rules are:
* A callback terminates the loop by returning any non-zero value
* Once the callback returns non-zero, it will not be called again
(i.e. the loop stops all iteration regardless of state)
* If the callback returns non-zero, the parent fn returns GIT_EUSER
* Although the parent returns GIT_EUSER, no error will be set in
the library and `giterr_last()` will return NULL if called.
This commit makes those changes across the library and adds tests
for most of the iteration APIs to make sure that they follow the
above rules.
|
|
|