Skip to content
New issue

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

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

Already on GitHub? # to your account

Add command-line options --hash and --no-hash #390

Merged
merged 2 commits into from
May 14, 2020
Merged

Add command-line options --hash and --no-hash #390

merged 2 commits into from
May 14, 2020

Conversation

sol
Copy link
Owner

@sol sol commented May 2, 2020

This is an alternative proposal for #381. It adds two new command-line flags, --no-hash and --hash. A brief description of the semantics follows.

Conceptually, there are four different modes, of which hpack exposes three to the user.

ForceNoHash

(enabled with --no-hash, implies --force)

  • No hash will be included in the header comment of the generated cabal file

ForceHash

(enabled with --hash, implies --force)

  • A hash will be included in the header comment of the generated cabal file

PreferNoHash

(the default behavior for hpack)

  • When there is no existing cabal file it behaves like ForceNoHash
  • When there is an existing cabal file the convention from that file is followed

PreferHash

(not exposed, but available through the API)

  • When there is no existing cabal file it behaves like ForceHash
  • When there is an existing cabal file the convention from that file is followed

@sol
Copy link
Owner Author

sol commented May 11, 2020

@snoyberg what behavior do you think will be appropriate for stack? Given that the hashes are a pain to work with when you put .cabal under revision control, I'm tempted to remove support for them entirely. Would that work for you?

@snoyberg
Copy link
Contributor

I honestly don't remember the discussion that led to hashes being included in the first place, or what problems the hashes were intended to solve. I can't think of a way this would break Stack, but I may not be remembering a corner case. Do you remember where we discussed this before?

@sol
Copy link
Owner Author

sol commented May 12, 2020

@snoyberg took me a while to dig it up, commercialhaskell/stack#3383 (comment).

@snoyberg
Copy link
Contributor

It looks like the original issue the hashes are meant to solve is: user edits cabal file instead of hpack file. There's a pretty clear warning at the top of the generated cabal file that it's autogenerated, and hpack files are probably better understood now than when that original issue opened. I wouldn't advocate for removing the hash, but I'm also not opposed to it. Entirely your call :)

@snoyberg
Copy link
Contributor

And thanks for doing the digging on finding that, and pinging me on the topic in the first place

@sol sol merged commit f455b78 into master May 14, 2020
@sol sol deleted the add-no-hash branch May 14, 2020 15:18
@Javran
Copy link

Javran commented Dec 5, 2021

For people spending time reading every single line of this PR and yet have no clue how to disable existing hash: just delete your *.cabal file and let it regenerate.

Javran added a commit to Javran/advent-of-code that referenced this pull request Dec 5, 2021
turns out I just need to regenerate this.

"See details in sol/hpack#390" my ass.
@sol
Copy link
Owner Author

sol commented Dec 19, 2021

@Javran this may not be obvious, but hpack --force --no-hash will do what you want.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants