Skip to content

Stashing tab shows not staged/ not tracked files in view #2263

Open
@ondrej-ivanko

Description

@ondrej-ivanko

Hi,

I'm not sure it's even a bug.

When I was doing stashing in Stash[4] tab, you can switch what to stash by toggling staged/untracked files with keys i/u respectively.

At first I thought it's noop, since there was no visual indication or cue that anything changed. It works as it should by omitting untracked or staged files when toggling with respective keys.

I figured out that it behaves correctly without any obvious clue only by accident.
I had a single untracked directory with different user. The directory had root user and I couldn't stash it cause of permissions. Than the window popped up showing when I was attempting to stash with stashing configuration {StashUntracked: true, ...}. When pressing u, the config changed and I could stash only tracked files as expected.

To Reproduce
Create staged or untracked files with elevated permission like root in project folder. Notice error, than press u or i and see it stashes as expected.

Expected behavior
I expect to have visual cue for what will be stashed. It should be reflected in the file tree view upon pressing i/u keys.

Screenshots
Screenshot from 2024-06-10 11-21-16
The below screenshot actually show correct behavious, as there's nothing to stash, but files are still listed in file tree view
Screenshot from 2024-06-10 11-21-30

Context (please complete the following information):

  • OS/Distro + Version: Fedora Linux 39 (Workstation Edition) x86_64
  • GitUI Version nightly 2024-06-09 ()
  • Rust version: 1.74.0-x86_64-unknown-linux-gnu

Activity

changed the title [-]Stashing tab shows not stage/ not tracked files in view[/-] [+]Stashing tab shows not staged/ not tracked files in view[/+] on Jun 10, 2024
extrawurst

extrawurst commented on Jun 27, 2024

@extrawurst
Collaborator

i am confused. could you define an example case with some bash setting the files up in a way that the problem can be reproduced?

ondrej-ivanko

ondrej-ivanko commented on Jun 29, 2024

@ondrej-ivanko
Author

Hi, I am truly sorry. I only recently noticed that small box Options in the top right corner on tab 4 indicating which files I have selected for stashing. I just couldn't notice it :)) Therefore I thought there is no indication what is actually being stashed.

What I was hoping to see in the future is visual cue in form of filenames, that will be stashed. For example
Screenshot from 2024-06-29 20-06-36

The file1.txt is being tracked, the other two files are not. I would think the screen would show only file1.txt, since the options is set to not stash untracked files.

Screenshot from 2024-06-29 20-06-45

In this case no files are currently staged. And the options is set to not stash staged files (keep index). Therefore I would expect not to see any filenames.

So it's actually not a bug as I found out, but maybe a possible feature! :))

linked a pull request that will close this issue on Jul 6, 2024
kanielrkirby

kanielrkirby commented on Jul 6, 2024

@kanielrkirby

So currently, as I understand it, it seems that these options aren't used yet for a visual representation, but are used for a functional purpose. e.g., if you toggle untracked off (u), and write a stash (w), untracked files aren't added to the stash.

https://github.com/extrawurst/gitui/blob/6ec7eea02b201fc39fbecdbb787d46cdca22624a/src/tabs/stashing.rs#L71-L80

https://github.com/extrawurst/gitui/blob/6ec7eea02b201fc39fbecdbb787d46cdca22624a/asyncgit/src/sync/stash.rs#L100-L125

A couple ideas from me would be 1, we could add an identifier (?) to files that aren't tracked, and 2, we implement options for the the visual side (which looks straightforward as far as I can tell). I think it'd look something like this:

///
pub fn update(&mut self) -> Result<()> {
if self.is_visible() {
    let status_type = if self.options.keep_index { StatusType::Both } else { StatusType::WorkingDir };
    let show_untracked = if self.options.stash_untracked { Some(ShowUntrackedFilesConfig::All) } else { Some(ShowUntrackedFilesConfig::No) };
    self.git_status
    //TODO: support options
        .fetch(&StatusParams::new(status_type, show_untracked))?;
    }

    Ok(())
}

I've made a PR with that second change at the least (without the identifier idea).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Stashing tab shows not staged/ not tracked files in view · Issue #2263 · gitui-org/gitui