Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
fix(repository): prevents lib from crashing when not providing option…
…al arguments
  • Loading branch information
hazmah0 committed Sep 19, 2019
commit eb2b4f311c2d5f876bcc669c2b78092847e9f9b7
1 change: 1 addition & 0 deletions lib/Repository.js
Original file line number Diff line number Diff line change
Expand Up @@ -749,6 +749,7 @@ class Repository extends Requestable {
* @return {Promise} - the promise for the http request
*/
writeFile(branch, path, content, message, options, cb) {
options = options || {};
if (typeof options === 'function') {
cb = options;
options = {};
Expand Down
11 changes: 11 additions & 0 deletions test/repository.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,17 @@ describe('Repository', function() {
}));
});

it('should successfully write to repo when not providing optional options argument', function(done) {
remoteRepo.writeFile('master', fileName, initialText, initialMessage, undefined, assertSuccessful(done, function() {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think the reason people are running into this bug is because they're using Promises. The 2 option-less calls I'm imagining people are making:

  1. Using callbacks:
remoteRepo.writeFile('master', fileName, initialText, initialMessage, assertSuccessFunction)
  1. Using Promises:
remoteRepo.writeFile('master', fileName, initialText, initialMessage).then(res => {})

I'd like tests to verify the Promise approach, as we have many testing writing files with no options provided, but with a callback.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

True. Thinking back, I stumbled upon this using async/await. If one were to use the callback approach this would work fine since there is a check in the beginning to see if options is a function and in that case use that as the callback.

wait()().then(() => remoteRepo.getContents('master', fileName, 'raw',
assertSuccessful(done, function(err, fileText) {
expect(fileText).to.be(initialText);

done();
})));
}));
});

it('should rename files', function(done) {
remoteRepo.writeFile('master', fileName, initialText, initialMessage, assertSuccessful(done, function() {
wait()().then(() => remoteRepo.move('master', fileName, 'new_name', assertSuccessful(done, function() {
Expand Down