binarydist icon indicating copy to clipboard operation
binarydist copied to clipboard

Passing channel to cancel a diff

Open amlwwalker opened this issue 6 years ago • 1 comments

Hello! This is a cool bit of work. I am looking to cancel a diff (on large files where the diff takes time), I want to pass a channel into the function that gets checked for a message (on a switch case) and if a value comes off the channel, it cancels the diff and stops in its tracks and cleans up.

My questions.

Where best to put the channel? I am thinking to fork your work.

There is the line of code: https://github.com/kr/binarydist/blob/190e7de772656c6127fa8e55c6258ed1b7eabcee/diff.go#L234-L240

I.e the

for scan < len(nbuf) { 

line of code.

If I pass a channel into this function, and then inside the for loop, do a switch case can I stop the diff safely and destroy whatever diffing has already occured and pass back a success message? Its just because on larger files diffing can take some time and I'd like to be able to stop it...

Thanks!

amlwwalker avatar Jun 11 '19 09:06 amlwwalker

Given the way binarydist is currently implemented, a fork sounds reasonable.

(I think it would be preferable for binarydist to write the diff directly to the given Writer (if it's also a Seeker) rather than to a buffer. If it did, you could have the Writer cancel the diff by returning an error. But of course that would require some changes to this library.)

kr avatar Jun 12 '19 23:06 kr