exercism / cli

A Go based command line tool for exercism.org.
https://exercism.org/docs/using/solving-exercises/working-locally
MIT License
1.33k stars 354 forks source link

Add --force flag to restore command #304

Closed Tonkpils closed 7 years ago

Tonkpils commented 8 years ago

From https://github.com/exercism/cli/issues/259#issuecomment-164016348

bgrooven commented 8 years ago

Is it possible to send these updates by language? I get emails for all the different languages. It would be cool to see just the ones I'm interested in at the time.

On Apr 2, 2016, at 7:58 AM, Leo Correa notifications@github.com wrote:

From #259 (comment)

executing exercism restore we should display a list of files that were not restored because they already exist and specify that if the user wants those files overwritten, they should re-run the command with the --force command.

exercism restore --force should overwrite files with the ones provided by the restore API.

— You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub

Tonkpils commented 8 years ago

Is it possible to send these updates by language? I get emails for all the different languages. It would be cool to see just the ones I'm interested in at the time.

I'm not sure what you mean? The CLI itself doesn't send any updates. I think you mean to post this in the https://github.com/exercism/exercism.io repo?

Tonkpils commented 8 years ago

@kytrinyx I have something going on but it seems a bit messy with the output. I'm wondering how we can improve this or maybe it's just not the right way to go with displaying the files on the output?

Here's the output I have with items being restored and some unable to be restored because they exist:

% go build && ./exercism restore

Updated:                    19 problems
clojure (Bob)               /Users/leo/code/exercisms/clojure/bob
clojure (Rna Transcription) /Users/leo/code/exercisms/clojure/rna-transcription
elixir (Word Count)         /Users/leo/code/exercisms/elixir/word-count
go (Gigasecond)             /Users/leo/code/exercisms/go/gigasecond
java (Anagram)              /Users/leo/code/exercisms/java/anagram
java (Etl)                  /Users/leo/code/exercisms/java/etl
java (Hello World)          /Users/leo/code/exercisms/java/hello-world
java (Nucleotide Count)     /Users/leo/code/exercisms/java/nucleotide-count
java (Pangram)              /Users/leo/code/exercisms/java/pangram
java (Word Count)           /Users/leo/code/exercisms/java/word-count
javascript (Bob)            /Users/leo/code/exercisms/javascript/bob
javascript (Word Count)     /Users/leo/code/exercisms/javascript/word-count
ruby (Beer Song)            /Users/leo/code/exercisms/ruby/beer-song
ruby (Grade School)         /Users/leo/code/exercisms/ruby/grade-school
ruby (Nucleotide Count)     /Users/leo/code/exercisms/ruby/nucleotide-count
ruby (Phone Number)         /Users/leo/code/exercisms/ruby/phone-number
ruby (Rna Transcription)    /Users/leo/code/exercisms/ruby/rna-transcription
ruby (Robot Name)           /Users/leo/code/exercisms/ruby/robot-name
ruby (Word Count)           /Users/leo/code/exercisms/ruby/word-count

New:                        3 problems
erlang (Leap)               /Users/leo/code/exercisms/erlang/leap
ruby (Gigasecond)           /Users/leo/code/exercisms/ruby/gigasecond
ruby (Hamming)              /Users/leo/code/exercisms/ruby/hamming

unchanged: 8, updated: 19, new: 3

There was errors saving files:
- clojure (Bob): unable to write 2 files:
     * /Users/leo/code/exercisms/clojure/bob/README.md
     * /Users/leo/code/exercisms/clojure/bob/bob.clj
- clojure (Rna Transcription): unable to write 1 files:
     * /Users/leo/code/exercisms/clojure/rna-transcription/README.md
- elixir (Anagram): unable to write 3 files:
     * /Users/leo/code/exercisms/elixir/anagram/anagram.exs
     * /Users/leo/code/exercisms/elixir/anagram/anagram_test.exs
     * /Users/leo/code/exercisms/elixir/anagram/README.md
- elixir (Bob): unable to write 3 files:
     * /Users/leo/code/exercisms/elixir/bob/bob.exs
     * /Users/leo/code/exercisms/elixir/bob/bob_test.exs
     * /Users/leo/code/exercisms/elixir/bob/README.md
- elixir (Word Count): unable to write 3 files:
     * /Users/leo/code/exercisms/elixir/word-count/word-count.exs
     * /Users/leo/code/exercisms/elixir/word-count/word_count_test.exs
     * /Users/leo/code/exercisms/elixir/word-count/README.md
- go (Clock): unable to write 4 files:
     * /Users/leo/code/exercisms/go/clock/cases_test.go
     * /Users/leo/code/exercisms/go/clock/clock.go
     * /Users/leo/code/exercisms/go/clock/clock_test.go
     * /Users/leo/code/exercisms/go/clock/README.md
- go (Gigasecond): unable to write 4 files:
     * /Users/leo/code/exercisms/go/gigasecond/gigasecond_test.go
     * /Users/leo/code/exercisms/go/gigasecond/README.md
     * /Users/leo/code/exercisms/go/gigasecond/cases_test.go
     * /Users/leo/code/exercisms/go/gigasecond/gigasecond.go
- go (Leap): unable to write 4 files:
     * /Users/leo/code/exercisms/go/leap/cases_test.go
     * /Users/leo/code/exercisms/go/leap/leap.go
     * /Users/leo/code/exercisms/go/leap/leap_test.go
     * /Users/leo/code/exercisms/go/leap/README.md
- haskell (Bob): unable to write 3 files:
     * /Users/leo/code/exercisms/haskell/bob/bob_test.hs
     * /Users/leo/code/exercisms/haskell/bob/README.md
     * /Users/leo/code/exercisms/haskell/bob/bob.hs
- java (Anagram): unable to write 4 files:
     * /Users/leo/code/exercisms/java/anagram/build.gradle
     * /Users/leo/code/exercisms/java/anagram/src/main/java/.keep
     * /Users/leo/code/exercisms/java/anagram/src/main/java/Anagram.java
     * /Users/leo/code/exercisms/java/anagram/README.md
- java (Etl): unable to write 6 files:
     * /Users/leo/code/exercisms/java/etl/src/test/java/.keep
     * /Users/leo/code/exercisms/java/etl/src/test/java/EtlTest.java
     * /Users/leo/code/exercisms/java/etl/README.md
     * /Users/leo/code/exercisms/java/etl/build.gradle
     * /Users/leo/code/exercisms/java/etl/src/main/java/.keep
     * /Users/leo/code/exercisms/java/etl/src/main/java/Etl.java
- java (Hello World): unable to write 5 files:
     * /Users/leo/code/exercisms/java/hello-world/GETTING_STARTED.md
     * /Users/leo/code/exercisms/java/hello-world/build.gradle
     * /Users/leo/code/exercisms/java/hello-world/src/main/java/.keep
     * /Users/leo/code/exercisms/java/hello-world/src/main/java/HelloWorld.java
     * /Users/leo/code/exercisms/java/hello-world/README.md
- java (Nucleotide Count): unable to write 6 files:
     * /Users/leo/code/exercisms/java/nucleotide-count/src/test/java/.keep
     * /Users/leo/code/exercisms/java/nucleotide-count/src/test/java/NucleotideTest.java
     * /Users/leo/code/exercisms/java/nucleotide-count/README.md
     * /Users/leo/code/exercisms/java/nucleotide-count/build.gradle
     * /Users/leo/code/exercisms/java/nucleotide-count/src/main/java/.keep
     * /Users/leo/code/exercisms/java/nucleotide-count/src/main/java/DNA.java
- java (Pangram): unable to write 5 files:
     * /Users/leo/code/exercisms/java/pangram/build.gradle
     * /Users/leo/code/exercisms/java/pangram/src/main/java/.keep
     * /Users/leo/code/exercisms/java/pangram/src/test/java/.keep
     * /Users/leo/code/exercisms/java/pangram/src/test/java/PangramTest.java
     * /Users/leo/code/exercisms/java/pangram/README.md
- java (Word Count): unable to write 4 files:
     * /Users/leo/code/exercisms/java/word-count/README.md
     * /Users/leo/code/exercisms/java/word-count/build.gradle
     * /Users/leo/code/exercisms/java/word-count/src/main/java/.keep
     * /Users/leo/code/exercisms/java/word-count/src/main/java/WordCount.java
- javascript (Bob): unable to write 2 files:
     * /Users/leo/code/exercisms/javascript/bob/README.md
     * /Users/leo/code/exercisms/javascript/bob/bob.js
- javascript (Word Count): unable to write 1 files:
     * /Users/leo/code/exercisms/javascript/word-count/README.md
- python (Bob): unable to write 3 files:
     * /Users/leo/code/exercisms/python/bob/README.md
     * /Users/leo/code/exercisms/python/bob/bob.py
     * /Users/leo/code/exercisms/python/bob/bob_test.py
- ruby (Anagram): unable to write 3 files:
     * /Users/leo/code/exercisms/ruby/anagram/anagram_test.rb
     * /Users/leo/code/exercisms/ruby/anagram/README.md
     * /Users/leo/code/exercisms/ruby/anagram/anagram.rb
- ruby (Beer Song): unable to write 2 files:
     * /Users/leo/code/exercisms/ruby/beer-song/beer_song_test.rb
     * /Users/leo/code/exercisms/ruby/beer-song/README.md
- ruby (Bob): unable to write 3 files:
     * /Users/leo/code/exercisms/ruby/bob/README.md
     * /Users/leo/code/exercisms/ruby/bob/bob.rb
     * /Users/leo/code/exercisms/ruby/bob/bob_test.rb
- ruby (Grade School): unable to write 2 files:
     * /Users/leo/code/exercisms/ruby/grade-school/grade_school_test.rb
     * /Users/leo/code/exercisms/ruby/grade-school/README.md
- ruby (Nucleotide Count): unable to write 2 files:
     * /Users/leo/code/exercisms/ruby/nucleotide-count/nucleotide_count_test.rb
     * /Users/leo/code/exercisms/ruby/nucleotide-count/README.md
- ruby (Phone Number): unable to write 2 files:
     * /Users/leo/code/exercisms/ruby/phone-number/phone_number_test.rb
     * /Users/leo/code/exercisms/ruby/phone-number/README.md
- ruby (Rna Transcription): unable to write 2 files:
     * /Users/leo/code/exercisms/ruby/rna-transcription/rna_transcription_test.rb
     * /Users/leo/code/exercisms/ruby/rna-transcription/README.md
- ruby (Robot Name): unable to write 2 files:
     * /Users/leo/code/exercisms/ruby/robot-name/robot_name_test.rb
     * /Users/leo/code/exercisms/ruby/robot-name/README.md
- ruby (Word Count): unable to write 2 files:
     * /Users/leo/code/exercisms/ruby/word-count/word_count_test.rb
     * /Users/leo/code/exercisms/ruby/word-count/README.md

If you wish to override these files re-run the restore command using the --force flag

Thoughts?

kytrinyx commented 8 years ago

Yeah, that's a lot of output. A couple of options come to mind:

Also, maybe it doesn't make sense to differentiate with the updated/new in this context.

Tonkpils commented 8 years ago

Also, maybe it doesn't make sense to differentiate with the updated/new in this context.

I'm not sure what you mean there. Do you not want to display the updated/new output if there's conflicts and instead display a conflicts: N section?

kytrinyx commented 8 years ago

"updated/new" is mainly relevant when fetching. When you're restoring, then presumably you've had all of them. Conflict vs not kind of makes more sense to me in this context.

Tonkpils commented 8 years ago

Fair enough, I'll work on that :+1:

Tonkpils commented 8 years ago

I may be missing some context but when doing a restore new can actually be something? I'm assuming exercises I haven't fetched on the machine?

image

I have something similar to this

image

Now another issue with running with verbose flag is that the network calls get logged along with the output of the response body. It can leads to a load of files being sent to STDOUT.

image

What do you think about having a specific flag for restore that would display which items are conflicts?

kytrinyx commented 8 years ago

I may be missing some context but when doing a restore new can actually be something? I'm assuming exercises I haven't fetched on the machine?

Huh. Yeah, you're right. New is relevant to the machine, not to your account. Not sure how I feel about that, actually :)

Now another issue with running with verbose flag is that the network calls get logged along with the output of the response body. It can leads to a load of files being sent to STDOUT.

Eew. Yeah, that kind of stinks. I'm not sure what to do about that.

What do you think about having a specific flag for restore that would display which items are conflicts?

Instead of showing conflicts by default?

Tonkpils commented 8 years ago

Instead of showing conflicts by default?

Yeah, so without any flags we'd have the number of conflicts. With a flag as --dry-run or something similar, it would display the files that would be overwritten by --force?

kytrinyx commented 8 years ago

What if without any flags we had a small symbol in front of exercises with conflicts, and an explanation at the bottom about what it means?

I also like the idea of --force with --dry-run which would give you the verbose list of what it would overwrite with --force.

kytrinyx commented 7 years ago

TODO: we need to make a final decision on the behavior of the --force command. I've pinned this so it doesn't get closed as stale.

kytrinyx commented 7 years ago

In the nextercism CLI we will have a download command that is more flexible than the current fetch command. It will have some of the behavior of restore. This will have several flags to customize the behavior of overwriting, including --force.

I'm going to close this issue in favor of https://github.com/exercism/cli/issues/411