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
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
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
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