Log

Author Commit Date CI Message
Carlos Martín Nieto a8f19f81 2017-11-18T18:41:52 Merge pull request #4420 from pks-t/pks/strict-aliasing refcount: make refcounting conform to aliasing rules
Patrick Steinhardt 585b5dac 2017-11-18T15:43:11 refcount: make refcounting conform to aliasing rules Strict aliasing rules dictate that for most data types, you are not allowed to cast them to another data type and then access the casted pointers. While this works just fine for most compilers, technically we end up in undefined behaviour when we hurt that rule. Our current refcounting code makes heavy use of casting and thus violates that rule. While we didn't have any problems with that code, Travis started spitting out a lot of warnings due to a change in their toolchain. In the refcounting case, the code is also easy to fix: as all refcounting-statements are actually macros, we can just access the `rc` field directly instead of casting. There are two outliers in our code where that doesn't work. Both the `git_diff` and `git_patch` structures have specializations for generated and parsed diffs/patches, which directly inherit from them. Because of that, the refcounting code is only part of the base structure and not of the children themselves. We can help that by instead passing their base into `GIT_REFCOUNT_INC`, though.
Edward Thomson 530c878d 2017-11-15T22:43:37 Merge pull request #4414 from cpoerschke/master-test-status-codes-legend add test status codes legend to the 'Started' test trace
Christine Poerschke 19f37f97 2017-11-13T13:16:28 add test status codes legend to the 'Started' test trace motivation: (for someone new to the tests) it's puzzling to find the odd 'S' interspersed in the test output proposed alternative test output (extract): $ cmake --build . && ./libgit2_clar -srepo -v ... Loaded 340 suites: Started (test status codes: OK='.' FAILURE='F' SKIPPED='S') repo::config... repo::discover.......... repo::env. repo::getters... repo::hashfile.. repo::head...................... repo::headtree.... repo::init.........................S repo::message.. repo::new.. repo::open............. repo::pathspec.......... repo::reservedname..... repo::setters..... repo::shallow.... repo::state.............
Carlos Martín Nieto 15f8d9a2 2017-11-13T11:44:30 Merge pull request #4412 from cpoerschke/master-tests-repo-init-tweak s/Init/Index comment tweak for test_repo_init__init_with_initial_commit
Christine Poerschke 732c0b6d 2017-11-12T15:17:31 s/Init/Index comment tweak for test_repo_init__init_with_initial_commit
Patrick Steinhardt fd1492e8 2017-11-12T15:34:42 Merge pull request #4408 from hkleynhans/pos_neg_zero_offset_sig signature: distinguish +0000 and -0000 UTC offsets
Henry Kleynhans f063dafb 2017-11-12T10:56:50 signature: distinguish +0000 and -0000 UTC offsets Git considers '-0000' a valid offset for signature lines. They need to be treated as _not_ equal to a '+0000' signature offset. Parsing a signature line stores the offset in a signed integer which does not distinguish between `+0` and `-0`. This patch adds an additional flag `sign` to the `git_time` in the `signature` object which is populated with the sign of the offset. In addition to exposing this information to the user, this information is also used to compare signatures. /cc @pks-t @ethomson
Patrick Steinhardt 8c928be4 2017-11-12T12:34:51 Merge pull request #4406 from yoney/clar Fix clar to verify command line arguments before execute
Edward Thomson 1d7c15ad 2017-11-11T20:15:07 Merge pull request #4310 from pks-t/pks/common-parser Common parser interface
Yoney 32758631 2017-11-11T15:38:27 clar: verify command line arguments before execute When executing `libgit2_clar -smerge -invalid_option`, it will first execute the merge test suite and afterwards output help because of the invalid option. With this changa, it verifies all options before execute. If there are any invalid options, it will output help and exit without actually executing the test suites.
Edward Thomson 46e1dabb 2017-11-11T17:21:13 Merge pull request #4403 from hkleynhans/select_bundled_zlib cmake: Allow user to select bundled zlib
Patrick Steinhardt 9e66590b 2017-07-21T13:01:43 config_parse: use common parser interface As the config parser is now cleanly separated from the config file code, we can easily refactor the code and make use of the common parser module. This removes quite a lot of duplicated functionality previously used for handling the actual parser state and replaces it with the generic interface provided by the parser context.
Patrick Steinhardt 1953c68b 2017-11-11T17:12:31 config_file: split out module to parse config files The configuration file code grew quite big and intermingles both actual configuration logic as well as the parsing logic of the configuration syntax. This makes it hard to refactor the parsing logic on its own and convert it to make use of our new parsing context module. Refactor the code and split it up into two parts. The config file code will only handle actual handling of configuration files, includes and writing new files. The newly created config parser module is then only responsible for parsing the actual contents of a configuration file, leaving everything else to callbacks provided to its provided function `git_config_parse`.
Patrick Steinhardt e72cb769 2017-07-14T14:37:07 parse: implement `git_parse_peek` Some code parts need to inspect the next few bytes without actually consuming it yet, for example to examine what content it has to expect next. Create a new function `git_parse_peek` which returns the next byte without modifying the parsing context and use it at multiple call sites.
Patrick Steinhardt 252f2eee 2017-07-14T13:45:05 parse: implement and use `git_parse_advance_digit` The patch parsing code has multiple recurring patterns where we want to parse an actual number. Create a new function `git_parse_advance_digit` and use it to avoid code duplication.
Patrick Steinhardt 65dcb645 2017-07-14T13:29:29 patch_parse: use git_parse_contains_s Instead of manually checking the parsing context's remaining length and comparing the leading bytes with a specific string, we can simply re-use the function `git_parse_ctx_contains_s`. Do so to avoid code duplication and to further decouple patch parsing from the parsing context's struct members.
Patrick Steinhardt 7bdfc0a6 2017-07-14T15:33:32 parse: always initialize line pointer Upon initializing the parser context, we do not currently initialize the current line, line length and line number. Do so in order to make the interface easier to use and more obvious for future consumers of the parsing API.
Patrick Steinhardt ef1395f3 2017-11-11T15:30:43 parse: extract parse module The `git_patch_parse_ctx` encapsulates both parser state as well as options specific to patch parsing. To advance this state and keep it consistent, we provide a few functions which handle advancing the current position and accessing bytes of the patch contents. In fact, these functions are quite generic and not related to patch-parsing by themselves. Seeing that we have similar logic inside of other modules, it becomes quite enticing to extract this functionality into its own parser module. To do so, we create a new module `parse` with a central struct called `git_parse_ctx`. It encapsulates both the content that is to be parsed as well as its lengths and the current position. `git_patch_parse_ctx` now only contains this `parse_ctx` only, which is then accessed whenever we need to touch the current parser. This is the first step towards re-using this functionality across other modules which require parsing functionality and remove code-duplication.
Henry Kleynhans a0b0b808 2017-11-11T14:03:14 cmake: Allow user to select bundled zlib Under some circumstances the installed / system version of zlib may not be desirable due to being too old or buggy. This patch adds the option `USE_BUNDLED_ZLIB` that will cause the bundled version of zlib to be used. We may also want to add similar functionality to allow the user to select other bundled 3rd-party dependencies instead of using the system versions. /cc @pks-t @ethomson
Edward Thomson 0393ecc6 2017-11-11T13:29:27 Merge pull request #4308 from pks-t/pks/header-state-machine patch_parse: implement state machine for parsing patch headers
Edward Thomson 5a061a23 2017-11-10T23:23:02 Merge pull request #4401 from ktdreyer/describe-h-spelling describe.h: fix spelling in comments
Ken Dreyer 38169764 2017-11-10T16:19:39 describe.h: fix spelling in comments optios -> options
Patrick Steinhardt 88450c1c 2017-11-09T21:49:30 Merge pull request #4283 from tiennou/generic-tls CMake: make HTTPS support more generic
Edward Thomson 28c89507 2017-11-06T11:49:46 Merge pull request #4394 from libgit2/cmn/macos-ramdisk travis: put clar's sandbox in a ramdisk on macOS
Edward Thomson 1082eabb 2017-11-06T11:36:34 Merge pull request #4397 from pks-t/pks/appveyor-examples appveyor: build examples
Patrick Steinhardt bf15dbf6 2017-11-06T12:47:40 examples: network: fix Win32 linking errors due to getline The getline(3) function call is not part of ISO C and, most importantly, it is not implemented on Microsoft Windows platforms. As our networking example code makes use of getline, this breaks builds on MSVC and MinGW. As this code wasn't built prior to the previous commit, this was never noticed. Fix the error by instead implementing a `readline` function, which simply reads the password from stdin until it reads a newline character.
Patrick Steinhardt 0b98a66b 2017-11-06T11:16:02 appveyor: build examples By default, CMake will not build our examples directory. As we do not instruct either the MinGW or MSVC builds on AppVeyor to enable building these examples, we cannot verify that those examples at least build on Windows systems. Fix that by passing `-DBUILD_EXAMPLES=ON` to AppVeyor's CMake invocation.
Carlos Martín Nieto 8233f6e3 2017-11-04T23:34:14 Merge pull request #4386 from novalis/gitignore-ignore-space ignore spaces in .gitignore files
Carlos Martín Nieto 6f1e4f4f 2017-11-04T18:31:22 CHANGELOG: add note about supporting conditional includes
Carlos Martín Nieto 0d723f39 2017-11-04T18:30:29 Merge pull request #4332 from pks-t/pks/conditional-includes Conditional includes
Carlos Martín Nieto 42627933 2017-11-04T18:03:26 Merge remote-tracking branch 'upstream/master' into pks/conditional-includes
Carlos Martín Nieto 1475b981 2017-11-04T18:00:56 config: keep the output parameter at the start of the function
Carlos Martín Nieto 71ba4644 2017-10-31T14:43:28 travis: let's try a 5GB ramdisk
Carlos Martín Nieto 37bb1512 2017-10-31T10:40:24 travis: put clar's sandbox in a ramdisk on macOS The macOS tests are by far the slowest right now. This attempts to remedy the situation somewhat by asking clar to put its test data on a ramdisk.
Carlos Martín Nieto c44b9170 2017-10-31T09:52:33 tests: resolve the real path for the sandbox in includeIf tests We put our repository in the temporary directory which makes macOS map the path into a virtual path. `realpath(3)` can resolve it and we do so during repository opening, but that makes its path have a different prefix from the sandbox path clar thinks we have. Resolve the sandbox path before putting it into the test config files so the paths match as expected.
Carlos Martín Nieto 990d2b85 2017-10-31T00:13:59 Merge pull request #4393 from libgit2/ethomson/pgpkey travis: grab pgp key from www.edwardthomson.com
Carlos Martín Nieto 6f8a6c33 2017-10-31T00:02:52 Merge pull request #4392 from libgit2/cmn/config-write-preserve-case Preserve the input casing when writing config files
Edward Thomson 45c6efd5 2017-10-30T15:40:44 travis: grab pgp key from www.edwardthomson.com Getting the key from the MIT keyserver is surprisingly unreliable. Try getting it from my website instead...
Carlos Martín Nieto 94e30d9b 2017-10-30T15:55:18 config: check for OOM when writing
Carlos Martín Nieto ba1afdc3 2017-10-30T06:29:02 CHANGELOG: add note about config writing changes
Carlos Martín Nieto 8ec806d7 2017-10-30T06:23:31 config: preserve the original case when writing out new sections and vars For sections we will still use the existing one even if the case disagrees, but the variable always gets written with the case given by the caller.
Carlos Martín Nieto bb8bc4b8 2017-10-30T06:21:55 config: add failing test for preserving case when writing keys While most parts of a configuration key are case-insensitive, we should still be case-preserving and write down whatever string the caller provided.
David Turner 5cb6a2c9 2017-10-29T12:28:43 Ignore trailing whitespace in .gitignore files (as git itself does)
Carlos Martín Nieto 9e3fb594 2017-10-29T15:32:18 Merge pull request #4373 from cjhoward92/examples/log-show-log-size example-log: add support for --log-size
Carlos Martín Nieto 79e09e1a 2017-10-29T13:16:09 Merge pull request #3944 from mhagger/diff-indent-heuristic Implement a diff indent heuristic
Carlos Martín Nieto 1b9cc2ec 2017-10-29T12:08:00 Merge remote-tracking branch 'upstream/master' into diff-indent-heuristic
Edward Thomson 781d73bf 2017-10-28T12:08:39 Merge pull request #4357 from invenia/cv/ssh-passphrase-incorrect Ask for SSH credentials again when passphrase is wrong
Edward Thomson 70e4a31a 2017-10-28T12:07:08 Merge pull request #4384 from pks-t/pks/rm-example-makefile examples: remove Makefile
Etienne Samson c9bb68c2 2017-09-07T00:41:54 cmake: move Darwin-specific block around This allows us to only link against CoreFoundation when using the SecureTransport backend
Etienne Samson 9980be03 2017-09-06T22:13:58 cmake: Add USE_HTTPS as a CMake option It defaults to ON, e.g. "pick whatever default is appropriate for the platform". It accepts one of SecureTransport, OpenSSL, WinHTTP, or OFF. It errors if the backend library couldn't be found.
Etienne Samson 10b25dbf 2017-08-10T00:03:30 cmake: braces are not needed here
Etienne Samson fdd06874 2017-08-09T21:35:53 cmake: use FeatureSummary to display which features we end up using
Etienne Samson 99d6ebb3 2017-09-06T22:01:50 cmake: make our macOS helpers more CMake-y
Etienne Samson 152f3766 2017-09-06T21:53:58 cmake: fix indentation before enhancing
Etienne Samson 766b4ddb 2017-07-02T16:11:13 https: correct some error messages
Etienne Samson d3ef11e0 2017-03-19T03:31:41 clar: exit immediately on initialization failure
Etienne Samson 22317057 2017-03-21T00:36:32 https: Prevent OpenSSL from namespace-leaking
Etienne Samson e9369856 2017-03-21T00:25:15 stream: Gather streams to src/streams
Etienne Samson 08c1b8fc 2017-08-28T21:24:13 cmake: simplify some HTTPS tests
Curtis Vogt f2f14724 2017-09-21T15:51:52 transports: ssh: ask for credentials again when passphrase is wrong When trying to decode the private key it looks like LibSSH2 returns a LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED when the passphrase is incorrect.
Patrick Steinhardt 9b12eb6f 2017-10-20T15:05:26 examples: remove Makefile Back in the days when libgit2 was still young, libgit2 was using plain Makefiles as build infrastructure. We later changed that to instead use the CMake build system to make cross-platform development easier. In the process, we forgot to remove the Makefile from our examples directory, which is fixed by this commit here. Furthermore, remove the accompanying .gitignore file, which ignores build outputs. As we do out-of-tree builds only nowadays, no output is generated in that directory anymore.
Edward Thomson 8f05d2d8 2017-10-20T12:29:53 Merge pull request #4382 from pks-t/pks/cmake-source-dir cmake: use project-relative binary and source directories
Patrick Steinhardt 4da74c83 2017-10-20T07:29:17 cmake: use project-relative binary and source directories Due to our split of CMake files into multiple modules, we had to replace some uses of the `${CMAKE_CURRENT_SOURCE_DIR}` and `${CMAKE_CURRENT_BINARY_DIR}` variables and replace them with `${CMAKE_SOURCE_DIR}` and `${CMAKE_BINARY_DIR}`. This enabled us to still be able to refer to top-level files when defining build instructions inside of a subdirectory. When replacing all variables, it was assumed that the absolute set of variables is always relative to the current project. But in fact, this is not the case, as these variables always point to the source and binary directory as given by the top-levl project. So the change actually broke the ability to include libgit2 directly as a subproject, as source files cannot be found anymore. Fix this by instead using project-specific source and binary directories with `${libgit2_SOURCE_DIR}` and `${libgit2_BINARY_DIR}`.
Patrick Steinhardt 661cf4d4 2017-10-19T08:16:36 Merge pull request #4375 from mhagger/cmake-version-3.0.x Fix compilation for CMake versions 3.0.x where x >= 1
Michael Haggerty 5efe9d12 2017-10-14T08:58:14 Introduce a new `XDL_INLINE` macro and use it instead of `inline` `inline` is not portable enough, and the `xdiff` code doesn't import the `GIT_INLINE` macro. So introduce a new `XDL_INLINE` macro (with the same definition as `GIT_INLINE`). Use the new macro to inline two functions in `xdiffi.c`.
Michael Haggerty 8bbee8f3 2017-10-14T08:36:54 Fix compilation for CMake versions 3.0.x where x >= 1 Apparently policy CMP0015 was added in CMake 3.1. With CMake 3.0.2, the build was failing with CMake Error at CMakeLists.txt:18 (CMAKE_POLICY): Policy "CMP0051" is not known to this version of CMake. This patch makes it work.
Carson Howard 12a888d5 2017-10-13T07:18:54 examples: log: pass options pointer to print_commit Cleaned up the PR to address styling issues.
Carson Howard 27ff888f 2017-10-11T23:07:24 PROJECTS: remove example for --log-size
Carson Howard 1436b0e1 2017-10-11T21:47:58 example-log: add support for --log-size
Edward Thomson 8ac8c78c 2017-10-09T15:15:08 Merge pull request #4356 from pks-t/pks/static-clar cmake: use static dependencies when building static libgit2
Edward Thomson 34ec6f3a 2017-10-09T15:01:29 Merge pull request #4372 from pks-t/pks/xcode-linking cmake: fix linking in Xcode with object libraries only
Edward Thomson 9840dad2 2017-10-09T14:57:33 Merge pull request #4368 from pks-t/pks/smart-negotiate-revwalk-memleak transports: smart: fix memory leak when skipping symbolic refs
Patrick Steinhardt f7d837c8 2017-05-24T12:12:29 config_file: implement "gitdir/i" conditional Next to the "gitdir" conditional for including other configuration files, there's also a "gitdir/i" conditional. In contrast to the former one, path matching with "gitdir/i" is done case-insensitively. This commit implements the case-insensitive condition.
Patrick Steinhardt 071b6c06 2017-05-24T11:13:36 config_file: implement conditional "gitdir" includes Upstream git.git has implemented the ability to include other configuration files based on conditions. Right now, this only includes the ability to include a file based on the gitdir-location of the repository the currently parsed configuration file belongs to. This commit implements handling these conditional includes for the case-sensitive "gitdir" condition.
Carlos Martín Nieto fb11544b 2017-10-09T11:59:19 Merge pull request #4371 from pks-t/pks/test-checkout-tree-refactoring tests: checkout::tree: verify status entrycount changes on chmod
Patrick Steinhardt 9d7a75be 2017-08-25T19:15:00 config_file: make repo and config path accessible to reader The reader machinery will be extended to handle conditional includes. The only conditions that currently exist all match the against the git directory of the repository the config file belongs to. As such, we need to have access to the repository when reading configuration files to properly handle these conditions. One specialty of thes conditional includes is that the actual pattern may also be a relative pattern starting with "./". In this case, we have to match the pattern against the path relative to the config file which is currently being parsed. So besides the repository, we also have to pass down the path to the current config file that is being parsed.
Patrick Steinhardt d5b9d9e9 2017-05-23T10:53:49 config_file: extract function to parse include path The logic inside this function will be required later on, when implementing conditional includes. Extract it into its own function to ease the implementation.
Patrick Steinhardt 529e873c 2017-05-23T11:51:00 config: pass repository when opening config files Our current configuration logic is completely oblivious of any repository, but only cares for actual file paths. Unfortunately, we are forced to break this assumption by the introduction of conditional includes, which are evaluated in the context of a repository. Right now, only one conditional exists with "gitdir:" -- it will only include the configuration if the current repository's git directory matches the value passed to "gitdir:". To support these conditionals, we have to break our API and make the repository available when opening a configuration file. This commit extends the `open` call of configuration backends to include another repository and adjusts existing code to have it available. This includes the user-visible functions `git_config_add_file_ondisk` and `git_config_add_backend`.
Patrick Steinhardt d02cf564 2017-05-23T12:56:41 repository: constify several repo parameters for getters Several functions to retrieve variables from a repository only return immutable values, which allows us to actually constify the passed-in repository parameter. Do so to help a later patch, which will only have access to a constant repository.
Patrick Steinhardt f38ce9b6 2017-05-24T11:09:38 path: expose `git_path_is_dirsep` This function has previously been implemented in Windows-specific path handling code as `path__is_dirsep`. As we will need this functionality in other parts, extract the logic into "path.h" alongside with a non-Windows implementation.
Patrick Steinhardt e54cf1a3 2017-05-24T11:07:20 path: expose `git_path_is_absolute` This function has previously been implemented in Windows-specific path handling code as `path__is_absolute`. As we will need this functionality in other parts, extract the logic into "path.h" alongside with a non-Windows implementation.
Patrick Steinhardt 0e709032 2017-10-09T10:55:02 cmake: fix linking in Xcode with object libraries only CMake is unable to generate a correct Xcode project when trying to link libraries with only object libraries as its input. As our new build infrastructure makes heavy use of object libraries now, this affects our libgit2 library target, as well, leading to linking errors. Fix the issue by adding a dummy file to the libgit2 objects. As we always have the "features.h" header ready which contains defines only, we can simply link it into the resulting library without any effect whatsoever. This fixes building with Xcode.
Patrick Steinhardt 09c15a7f 2017-10-09T09:08:19 tests: checkout::tree: check that the status list catches mode changes While we verify that we have no mode changes after calling `git_checkout_tree`, we do not verify that the `p_chmod` calls actually resulted in a changed entry. While we should assume that this works due to separate tests for the status list, we should test for the change being listed to avoid programming errors in the test.
Patrick Steinhardt 880dfc50 2017-10-09T09:06:24 tests: checkout::tree: extract check for status entrycount There are multiple locations where we have the same code to check whether the count of status list entries of a repository matches an expected number. Extract that into a common function.
Patrick Steinhardt 38e769cb 2017-10-09T09:00:29 Merge pull request #4369 from libgit2/ethomson/checkout_typechange Checkout typechange-only deltas
Patrick Steinhardt 7cb705cb 2017-10-06T12:05:26 transports: smart: fix memory leak when skipping symbolic refs When we setup the revision walk for negotiating references with a remote, we iterate over all references, ignoring tags and symbolic references. While skipping over symbolic references, we forget to free the looked up reference, resulting in a memory leak when the next iteration simply overwrites the variable. Fix that issue by freeing the reference at the beginning of each iteration and collapsing return paths for error and success.
Edward Thomson 21e6a11a 2017-10-07T12:55:16 Merge pull request #4359 from libgit2/cmn/proxy-options-free Plug some leaks in curl's proxy handling
Edward Thomson 19e8faba 2016-06-15T01:59:56 checkout: test force checkout when mode changes Test that we can successfully force checkout a target when the file contents are identical, but the mode has changed.
Edward Thomson 128c5ca9 2017-10-07T12:23:33 checkout: do not test file mode on Windows On Windows, we do not support file mode changes, so do not test for type changes between the disk and tree being checked out. We could have false positives since the on-disk file can only have an (effective) mode of 0100644 since NTFS does not support executable files. If the tree being checked out did have an executable file, we would erroneously decide that the file on disk had been changed.
Carlos Martín Nieto 25fdb3f0 2017-10-07T11:25:12 proxy: rename the options freeing function
Edward Thomson 58deac77 2017-10-07T02:06:43 Merge pull request #4370 from libgit2/example_general Fix Issue #4047 Check return codes and free objects
Edward Thomson e523826c 2017-10-07T01:38:53 Merge pull request #4321 from libgit2/ethomson/libcurl_build travis: add custom apt sources
Douglas Swanson f4770e47 2017-01-01T09:28:39 Fix Issue #4047 Check return codes and free objects
Edward Thomson 668fa071 2017-10-07T00:26:21 Merge pull request #4363 from cjhoward92/typedef-push-update-reference remote: add typedef to normalize push_update_reference callback
Edward Thomson e2e3943d 2017-10-07T00:22:22 Merge pull request #4367 from pks-t/pks/peel-peeled-to-tag refs: do not use peeled OID if peeling to a tag
Edward Thomson 9dc21efd 2017-10-07T00:10:06 travis: add custom apt sources Move back to Travis's VM infrastructure for efficiency.
Edward Thomson 752b7c79 2016-06-15T02:00:35 checkout: treat files as modified if mode differs When performing a forced checkout, treat files as modified when the workdir or the index is identical except for the mode. This ensures that force checkout will update the mode to the target. (Apply this check for regular files only, if one of the items was a file and the other was another type of item then this would be a typechange and handled independently.)
Carson Howard 7138ce37 2017-10-06T07:16:26 remote: add typedef to normalize push_update_reference callback Very many callbacks in libgit2 have some sort of typedef to normalize the name at git_<name_of_operation>_cb. Add a typedef for push_update_references in the remote so the name follows the same conventions.
Patrick Steinhardt 62ac3931 2017-10-06T14:57:02 Merge pull request #4362 from jacwah/graphdoc Document that a commit is not a descendant of itself