Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Include Confirmation dialogue if a file is about to be overwritten #86

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

prithvijj
Copy link

@prithvijj prithvijj commented Apr 26, 2024

Changes

  • Added in a huh.NewConfirm and huh.NewInput fields, that checks if the output file already exists within the given directory
  • If the user selects to overwrite the file, execution continues as is
  • If the user selects to not overwrite the file, an input field is provided to select a new output filename
  • The huh forms will be rendered only if the stdout is a terminal

Testing Notes

  • Ran the following command go run ./... --execute "cat SECURITY.md"

image

  • Choosing Yes will overwrite to the default output filename

image

  • Ran the following command go run ./... --execute "cat SECURITY.md" again

  • Choosing No will prompt an Input field to enter the new output filename

image

  • After inputting a new filename shows that it works as expected

image

Other Notes

  • I'm not sure how to fix the tests, since upon running go test -v ./... , the tests would hang, since it's probably expecting an input for the huh forms introduced. Would like to get some advice, shall ask on Discord too!
  • Let me know if there is anything else I'm missing! I did check the CONTRIBUTING.md and the issue I wanted to help out on feat: include confirmation dialogue if a file is about to get overwritten #35

@debdutdeb
Copy link

I was going to look into adding this 👍 thanks !

Comment on lines +142 to +148
confirmOverwriteForm :=
huh.NewConfirm().
Title(fmt.Sprintf("'%s' already exists. Would you like to overwrite this file?", config.Output)).
Value(&confirm)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should check for if is a directory or not first. If directory, might be better to fail immediately. to save people from themselves.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair, I shall get to this in like the next 6 hours or something

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @debdutdeb

image

So I tried the following:

  • freeze.png already exist
  • Ran the following command below
  • Entered the new file name as non-exist/file.png indicating an example of the directory not existing, and adding a file within a non existent directory
    And it failed which is good
go run ./... --execute "cat SECURITY.md"
                                      
   ERROR  Unable to convert SVG to PNG
                                      
  open non-exist/file.png: no such file or directory
                                                    
exit status 1

Obviously when I added it as a parameter for the output, it fails as expected since the file is being added within a non existent directory, which I think is intended

go run ./... --execute "cat SECURITY.md" --output "non-exist/file.png"
                                      
   ERROR  Unable to convert SVG to PNG
                                      
  open non-exist/file.png: no such file or directory
                                                    
exit status 1

And finally, when the form pops up and add the filename as non-exist-dir/non-exist-dir2 to also indicate 2 non existent directory, it fails as expected (yeah even though the non-exist-dir2 would end up becoming a file atleast with me being on Pop OS)

go run ./... --execute "cat SECURITY.md"
                                
   ERROR  Unable to write output
                                
  open non-exist-dir/non-exist-dir2: no such file or directory
                                                              
exit status 1

but yeah should I still go ahead and check if the given path is a directory? To me it seems like it ends up handling it, open to whatever!

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It does but ig that depends on how file is being written and expection for actions after the confirmation. Like code that writes to the files consider them simply files, and might someday want to remove before writing, which would remove the directory not knowing it is a directory.

So I'd suggest still adding that check.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure thing, will look into it within like 24 hours or something!

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#86 (comment)

Gone ahead and resolved it here, lemme know if there's anything else!

@maaslalani
Copy link
Contributor

Nice! I like this idea!

@prithvijj
Copy link
Author

prithvijj commented Apr 29, 2024

Changes:

  • Based on the Discord Conversation in the #contributions channel, ended up using the isatty lib to render the huh form, such that when the unit tests are run, it doesn't affect it

go test -v ./...

image

but yeah, Lemme know if there's anything else missing

@prithvijj prithvijj marked this pull request as ready for review April 29, 2024 23:44
@prithvijj
Copy link
Author

Changes:

  • Added in check if the new filename provided is a directory,
  • If it's a directory then throw err, else continue as is

Screenshot showing that a random directory is created beforehand and freeze is executed, which shows the overwrite confirmation form
image

Providing input this-is-dir to show that it is overwriting to a directory
image

Throws error indicating that it could not overwrite to the directory, which is expected
image

pbj@pop-os:~/Github/freeze2$ mkdir this-is-dir
pbj@pop-os:~/Github/freeze2$ go run ./... --execute "cat SECURITY.md"
                                                                                    
   ERROR  'this-is-dir' is a directory. Hence cannot overwrite to the given filename
                                                                                    
  could not overwrite to filename
                                 
exit status 1

Looking for a re-review!

@prithvijj
Copy link
Author

Just been having discussions on Discord Channel for #contributions, been a bit stale on my end,
There was a good point made about figuring out if a flag could be introduced which overwrites the file in case no tty is recognized, and I've responded with it

Let's see what that looks like, shall keep the PR updated

- Added in a `huh.NewConfirm` and `huh.NewInput` fields, that checks
  if the output file already exists within the given directory
- If the user selects to `overwrite` the file, execution continues as is
- If the user selects to `not overwrite` the file, an `input` field is
  provided to select a new output filename
- The `huh` forms will be rendered only if the `stdout` is a terminal
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants