Skip to content

Tags: GitoxideLabs/gitoxide

Tags

v0.41.0

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### New Features

 - add `gix blame -L start,end`
 - add `gix env` to print paths relevant to the Git installation.
 - Document the remaining subcommands
 - Add support for statistics and additional performance information.
 - add `gix blame` to the CLI
   That way it's possible to see the `blame` result of any file in the
   repository.

### Commit Statistics

 - 10 commits contributed to the release over the course of 26 calendar days.
 - 27 days passed between releases.
 - 5 commits were understood as [conventional](https://www.conventionalcommits.org).
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

 * **Uncategorized**
    - Merge pull request #1766 from cruessler/add-range-to-gix-blame (90fef01)
    - Add `gix blame -L start,end` (4a78395)
    - Merge pull request #1758 from GitoxideLabs/git-shell (851a7c4)
    - Merge pull request #1757 from lu-zero/document-subcommands (31d83a4)
    - Add tailing `.` for consistency (ddddf02)
    - Add `gix env` to print paths relevant to the Git installation. (75d689f)
    - Document the remaining subcommands (278125a)
    - Merge pull request #1453 from cruessler/gix-blame (6ed9976)
    - Add support for statistics and additional performance information. (4ffe6eb)
    - Add `gix blame` to the CLI (80e5804)

gix-worktree-v0.39.0

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### Chore

 - <csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/> bump `rust-version` to 1.70
   That way clippy will allow to use the fantastic `Option::is_some_and()`
   and friends.

### Commit Statistics

 - 4 commits contributed to the release over the course of 55 calendar days.
 - 55 days passed between releases.
 - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

 * **Uncategorized**
    - Update all changelogs prior to release (1f6390c)
    - Merge pull request #1762 from GitoxideLabs/fix-1759 (7ec21bb)
    - Bump `rust-version` to 1.70 (17835bc)
    - Merge pull request #1701 from GitoxideLabs/release (e8b3b41)

gix-worktree-stream-v0.19.0

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### Chore

 - <csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/> bump `rust-version` to 1.70
   That way clippy will allow to use the fantastic `Option::is_some_and()`
   and friends.

### Commit Statistics

 - 6 commits contributed to the release over the course of 27 calendar days.
 - 27 days passed between releases.
 - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

 * **Uncategorized**
    - Update all changelogs prior to release (1f6390c)
    - Merge pull request #1762 from GitoxideLabs/fix-1759 (7ec21bb)
    - Bump `rust-version` to 1.70 (17835bc)
    - Merge pull request #1410 from GitoxideLabs/status (0ab4f64)
    - Adapt to changes in `gix-traverse` (1de4e70)
    - Merge pull request #1739 from GitoxideLabs/new-release (d22937f)

gix-worktree-state-v0.17.0

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### Chore

 - <csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/> bump `rust-version` to 1.70
   That way clippy will allow to use the fantastic `Option::is_some_and()`
   and friends.

### Bug Fixes

 - Don't attempt +x if it was replaced by a non-regular file
   This does not make a difference in typical cases, and anytime it
   matters something has probably gone unexpectedly, but this narrows
   the window of time during which a race condition could occur where
   a regular file has been replaced with something else at the same
   path (e.g. a directory) by some other process.
   
   An example of why it's valuable to avoid this is that if the entry
   is a directory then executable permissions have a different meaning
   and adding them could increase access unintentionally. Likewise,
   when we set executable permissions we remove setuid, setgid, and
   sticky bits, which also have different meanings for directories; in
   particular, on a directory the sticky bit restricts deletion.
   
   (This also automatically avoids some problems in the case of
   `finalize_entry` being called with a path to set executable that
   was never a regular file in the first place. That should not
   happen, though, and allowing that is not a goal of this change.)
 - Don't set extra permissions with +x on existing file
   This fixes a bug that occurred when a regular file tracked as
   executable was checked out in a non-exclusive checkout on a
   Unix-like system (where the destination is a filesystem that
   supports Unix-style executable permissions). This occurs when
   `destination_is_initially_empty: true` is not explicitly set.
   
   Whether the file existed before or not, it is created without
   attempting to set its permissions to include executable bits, then
   the executable bits are added afterwards. On Unix-like systems, the
   file was given unrestricted 0777 permissions and was thus world
   writable. This happened regardless of the process umask or any
   other contextual factors.
   
   Although `0o777` is given as the mode both when permissions are set
   on creation (using `OpenOptionsExt::mode` and `OpenOptions::open`,
   which delegates to `open`), and when they are set after creation
   (using `PermissionsExt::set_mode` and `std::fs::set_permissions`,
   which delegates to `chmod`), the cases do not treat their mode
   arguments equivalently.
   
   - The first situation worked correctly because `open` automatically
   respects the current process umask. (The system takes care of
   this, as it is part of the semantics of creating a new file and
   specifying desired permissions.) So 777 was really expressing the
   idea of maximal permissions of those considered safe under the
   current configuration, including executable permissions.
- But the second situation did not work correctly, because `chmod`
     calls try to set the exact permissions specified (and usually
     succeed). Unlike `open`, with `chmod` there is no implicit use of
     the umask.
1. Unset the setuid, setgid, and sticky bits, in the rare case that
      any of them are set. Keeping them could be unsafe or have
      unexpected effects when set for a file that may conceptually
      hold different data or serve a different purpose (since this is
      a checkout).
   
      For the setuid and setgid bits, it would be unsafe to keep them
      when adding new executable permissions. The intent of setuid
      and setgit bits is ambiguous in this situation, since they may
      have been meant only to apply to an earlier version of the file,
      especially since users may expect the file to be deleted and a
      new file of the same name to be created, rather than to confer
      extra abilities when executable bits are added in the future.
      Unsetting them makes adding executable bits where read bits are
      already present (which we will do) a reasonably safe operation.
   
      In the case of the setgid bit, another reason to remove it is
      that, on some systems, the setgid bit in the absence of any
      executable bits has the different meaning of enabling mandatory
      file locking. If the setgid bit was set for this purpose, then
      the effect of setting the EGID and potentialy elevating the
      privileges of the user who runs it is surely not intended.
2. Check which read bits (for owner, group, and other) are already
      set on the file. We do this only by looking at the mode. For
      example, ACLs do not participate.
3. Set executable bits corresponding to the preexisting read bits.
      That is, for each of the owner, group, and others, if it can
      read (according to the file mode), set it to be able to execute
      as well.
   
      In some cases, this may have a different effect from what would
      happen if the file were created anew with the desired
      permissions specified by a broad mode (e.g. 777) and subject to
      the umask. This is because it is possible to have a umask that
      limits read and execute permissions differently. Also, the file
      may have had its permissions modified in some other way since
      creation.

### Commit Statistics

 - 11 commits contributed to the release over the course of 27 calendar days.
 - 27 days passed between releases.
 - 3 commits were understood as [conventional](https://www.conventionalcommits.org).
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

 * **Uncategorized**
    - Update all changelogs prior to release (1f6390c)
    - Merge pull request #1765 from EliahKagan/finalize-entry-next (8df5ba2)
    - Avoid another "unused import" warning on Windows (c956d1b)
    - Merge pull request #1764 from EliahKagan/finalize-entry (12f672f)
    - Don't attempt +x if it was replaced by a non-regular file (be0abaf)
    - Extract and test +x mode setting logic (bf33d2b)
    - Don't set extra permissions with +x on existing file (879d29d)
    - Test for excessive write permissions on nonexclusive checkout (4d4bf89)
    - Merge pull request #1762 from GitoxideLabs/fix-1759 (7ec21bb)
    - Bump `rust-version` to 1.70 (17835bc)
    - Merge pull request #1739 from GitoxideLabs/new-release (d22937f)

gix-validate-v0.9.3

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### Chore

 - <csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/> bump `rust-version` to 1.70
   That way clippy will allow to use the fantastic `Option::is_some_and()`
   and friends.

### Commit Statistics

 - 6 commits contributed to the release over the course of 55 calendar days.
 - 55 days passed between releases.
 - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
 - 0 issues like '(#ID)' were seen in commit messages

### Thanks Clippy

[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic. 

### Commit Details

 * **Uncategorized**
    - Update all changelogs prior to release (1f6390c)
    - Merge pull request #1762 from GitoxideLabs/fix-1759 (7ec21bb)
    - Bump `rust-version` to 1.70 (17835bc)
    - Merge pull request #1752 from GitoxideLabs/git-shell (1ca480a)
    - Thanks clippy (9193b05)
    - Merge pull request #1701 from GitoxideLabs/release (e8b3b41)

gix-v0.70.0

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### Chore

 - <csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/> bump `rust-version` to 1.70
   That way clippy will allow to use the fantastic `Option::is_some_and()`
   and friends.

### New Features

 - add `Repository::upstream_branch_and_remote_name_for_tracking_branch()`
   It's a way to learn about the Remote and upstream branch which would
   match the given local tracking branch.
 - more often check for interrupts in status iterator
 - add `tree::Editor|editor::Cursor::get()` to see if an entry is loaded at path.
   This can be useful to get a feeling for how far the tree was already made available,
   even though it won't reveal if an entry was edited.
 - `Repository::is_dirty()` now also checks for tree/index changes.
   This copmpletes the `is_dirty()` implementation.
 - `Repository::tree_index_status()` to see the changes between a tree and an index.
   It also respects `status.rename` and `status.renameLimit` to configure rename tracking.
 - add `Tree::depthfirst()` with a delegate.
   This allows a depth-first traversal with a delegate.
 - Add `blame` plumbing crate to the top-level.
   For now, it doesn't come with a simplified `gix` API though.

### Bug Fixes

 - `Repository::status()` detects files added to the index in an unborn repository.
   Previously it wouldn't show them.
 - `Respository::status()` iterator won't fail in unborn directories.
 - worktrees of submodules now know their correct worktree
   Previously they would use a very incorrect worktree which would cause
   the status to be calculated very wrongly.
 - status-iterator won't swallow legitimate modification during 'racy-git'.
   When a modification is marked as being racy, then previously the iterator would have
   kept the whole modification even though it should just have tracked the single change.
   
   This made the legitimate modification disappear.
 - `write_blob_stream()` does not need `Seek` trait anymore.
   Internally, it has to turn it into a buffer so it's not needed anymore.
   It also counteracts the idea of using a stream with arbitrarily big files.
 - `Submodule::status()` now konws about tree-index changes as well.
   This completes the status implementation.
 - remove unused fetch-error variants
   Note that it's a breaking change, but it's on top of a previous breaking change
   so folks would already have to update explicitly.

### Other

 - <csr-id-9db21601b61601c01cd2419543e2c461a7dd568d/> make really clear that `Repository::worktrees()` lists linked worktrees.
   Excluding the main worktree which isn't always present.

### New Features (BREAKING)

 - add `status::Platform::into_iter()` for obtaining a complete status.
   Note that it is still possible to disable the head-index status.
   
   Types moved around, effectivey removing the `iter::` module for most
   more general types, i.e. those that are quite genericlally useful in
   a status.

### Bug Fixes (BREAKING)

 - all `config::Snapshot` access now uses the new `Key` trait.
   That way one can officially use "section.name" strings or `&Section::NAME`.

### Commit Statistics

 - 40 commits contributed to the release over the course of 27 calendar days.
 - 27 days passed between releases.
 - 18 commits were understood as [conventional](https://www.conventionalcommits.org).
 - 1 unique issue was worked on: #1770

### Thanks Clippy

[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic. 

### Commit Details

 * **#1770**
    - `Repository::status()` detects files added to the index in an unborn repository. (cd8fabf)
 * **Uncategorized**
    - Update all changelogs prior to release (1f6390c)
    - Merge pull request #1774 from EliahKagan/complex-graph-no-baseline-next (90e08f1)
    - Use parse_spec_no_baseline with :/ for all 2.47.* on CI (fe33fa7)
    - Merge pull request #1772 from GitoxideLabs/improvements (4c8200f)
    - Merge pull request #1769 from GitoxideLabs/improvements (47e44c5)
    - `Respository::status()` iterator won't fail in unborn directories. (84019cb)
    - Merge pull request #1768 from GitoxideLabs/improvements (34fa6bb)
    - Adapt to changes in `gix-status` (25d480c)
    - Merge pull request #1750 from GitoxideLabs/odb-issue (e4fb21e)
    - Reproduce issue with 'too many packs' for slotmap (dbf079f)
    - Merge pull request #1763 from GitoxideLabs/better-refspec-primitives (af8f201)
    - Add `Repository::upstream_branch_and_remote_name_for_tracking_branch()` (da0e1c7)
    - Adapt to changes in `gix-refspec` (6d7dd9b)
    - Merge pull request #1762 from GitoxideLabs/fix-1759 (7ec21bb)
    - Bump `rust-version` to 1.70 (17835bc)
    - Make really clear that `Repository::worktrees()` lists linked worktrees. (9db2160)
    - Worktrees of submodules now know their correct worktree (bc02284)
    - Merge pull request #1752 from GitoxideLabs/git-shell (1ca480a)
    - Thanks clippy (9193b05)
    - Merge pull request #1749 from GitoxideLabs/status (8d84818)
    - More often check for interrupts in status iterator (5b6e5c8)
    - Merge pull request #1746 from GitoxideLabs/status (af704f5)
    - Add `tree::Editor|editor::Cursor::get()` to see if an entry is loaded at path. (3b53982)
    - Status-iterator won't swallow legitimate modification during 'racy-git'. (3bbd1f7)
    - `write_blob_stream()` does not need `Seek` trait anymore. (a03bde5)
    - Merge pull request #1410 from GitoxideLabs/status (0ab4f64)
    - `Submodule::status()` now konws about tree-index changes as well. (a987e68)
    - Add `status::Platform::into_iter()` for obtaining a complete status. (801689b)
    - All `config::Snapshot` access now uses the new `Key` trait. (a6f397f)
    - `Repository::is_dirty()` now also checks for tree/index changes. (8ae9e57)
    - `Repository::tree_index_status()` to see the changes between a tree and an index. (83f3d93)
    - Add `Tree::depthfirst()` with a delegate. (592e250)
    - Adapt to changes in `gix-traverse` (1de4e70)
    - Merge pull request #1453 from cruessler/gix-blame (6ed9976)
    - Add `blame` plumbing crate to the top-level. (25efbfb)
    - Release gix v0.69.1 (7659a65)
    - Merge pull request #1740 from GitoxideLabs/cargo-improvements (3fb0c18)
    - Remove unused fetch-error variants (51a4301)
    - Merge pull request #1739 from GitoxideLabs/new-release (d22937f)

gix-utils-v0.1.14

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### Chore

 - <csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/> bump `rust-version` to 1.70
   That way clippy will allow to use the fantastic `Option::is_some_and()`
   and friends.

### Commit Statistics

 - 4 commits contributed to the release.
 - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

 * **Uncategorized**
    - Update all changelogs prior to release (1f6390c)
    - Merge pull request #1762 from GitoxideLabs/fix-1759 (7ec21bb)
    - Bump `rust-version` to 1.70 (17835bc)
    - Merge pull request #1642 from GitoxideLabs/new-release (db5c9cf)

gix-url-v0.29.0

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### Chore

 - <csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/> bump `rust-version` to 1.70
   That way clippy will allow to use the fantastic `Option::is_some_and()`
   and friends.

### Commit Statistics

 - 4 commits contributed to the release over the course of 27 calendar days.
 - 27 days passed between releases.
 - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

 * **Uncategorized**
    - Update all changelogs prior to release (1f6390c)
    - Merge pull request #1762 from GitoxideLabs/fix-1759 (7ec21bb)
    - Bump `rust-version` to 1.70 (17835bc)
    - Merge pull request #1739 from GitoxideLabs/new-release (d22937f)

gix-traverse-v0.44.0

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### Chore

 - <csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/> bump `rust-version` to 1.70
   That way clippy will allow to use the fantastic `Option::is_some_and()`
   and friends.

### New Features (BREAKING)

 - `tree::depthfirst()` traversal
   A depth-first traversal yields the `.git/index` order.
   
   It's a breaking change as the `Visitor` trait gets another way
   to pop a tracked path, suitable for the stack used for depth first.

### Commit Statistics

 - 6 commits contributed to the release over the course of 27 calendar days.
 - 27 days passed between releases.
 - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

 * **Uncategorized**
    - Update all changelogs prior to release (1f6390c)
    - Merge pull request #1762 from GitoxideLabs/fix-1759 (7ec21bb)
    - Bump `rust-version` to 1.70 (17835bc)
    - Merge pull request #1410 from GitoxideLabs/status (0ab4f64)
    - `tree::depthfirst()` traversal (22f8939)
    - Merge pull request #1739 from GitoxideLabs/new-release (d22937f)

gix-transport-v0.45.0

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
### Chore

 - <csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/> bump `rust-version` to 1.70
   That way clippy will allow to use the fantastic `Option::is_some_and()`
   and friends.

### Commit Statistics

 - 4 commits contributed to the release over the course of 27 calendar days.
 - 27 days passed between releases.
 - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

 * **Uncategorized**
    - Update all changelogs prior to release (1f6390c)
    - Merge pull request #1762 from GitoxideLabs/fix-1759 (7ec21bb)
    - Bump `rust-version` to 1.70 (17835bc)
    - Merge pull request #1739 from GitoxideLabs/new-release (d22937f)