Sort the results of the require_all glob. #4912

Merged
merged 2 commits into from May 19, 2016

Conversation

Projects
None yet
2 participants
@parkr
Member

parkr commented May 19, 2016

Filesystems behave differently when performing glob listings.

In my environment, they are listed alphabetically. On my Mac, when asking for a list of files in a directory, those files are returned as a nicely sorted list. Alphabetized, like you'd want them to be. Like you'd expect them to be.

In some environments, quite different from my own, the return of a similar operation is quite random. Perhaps q comes before a, or e before d; the filesystem will choose its order of the day and you, the fare user, tired and weary from work, must bare the brunt of this.

And so, with this commit, I do hereby request that the noble makers of Dir[] provide for us, the downtrodden and ravaged users, some consistency. As a user of Ruby, I shouldn't have to know or consider the behaviour of an individual filesystem here; it should function the same for all filesystems.

Truly yours,
Parker.

Sort the results of the require_all glob.
Filesystems behave differently when performing glob listings.

In my environment, they are listed alphabetically. On my Mac, when asking for a list of files in a directory, those files are returned as a nicely sorted list. Alphabetized, like you'd want them to be. Like you'd expect them to be.

In some environments, quite different from my own, the return of a similar operation is quite random. Perhaps q comes before a, or e before d; the filesystem will choose its order of the day and you, the fare user, tired and weary from work, must bare the brunt of this.

And so, with this commit, I do hereby request that the noble makers of Dir[] provide for us, the downtrodden and ravaged users, some consistency. As a user of Ruby, I shouldn't have to know or consider the behaviour of an individual filesystem here; it should function the same for all filesystems.

Truly yours,
Parker

@parkr parkr added this to the 3.1.5 milestone May 19, 2016

@parkr

This comment has been minimized.

Show comment
Hide comment
@parkr

parkr May 19, 2016

Member

Error I am attempting to fix only occurs on certain Linux machines (not travis?):

NameError: uninitialized constant Jekyll::Drops::DocumentDrop
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll/drops/excerpt_drop.rb:5:in `<module:Drops>'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll/drops/excerpt_drop.rb:4:in `<module:Jekyll>'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll/drops/excerpt_drop.rb:3:in `<top (required)>'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:11:in `require'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:11:in `block in require_all'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:10:in `each'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:10:in `require_all'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:174:in `<top (required)>'
Member

parkr commented May 19, 2016

Error I am attempting to fix only occurs on certain Linux machines (not travis?):

NameError: uninitialized constant Jekyll::Drops::DocumentDrop
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll/drops/excerpt_drop.rb:5:in `<module:Drops>'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll/drops/excerpt_drop.rb:4:in `<module:Jekyll>'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll/drops/excerpt_drop.rb:3:in `<top (required)>'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:11:in `require'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:11:in `block in require_all'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:10:in `each'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:10:in `require_all'
  .bundle/ruby/2.1.0/gems/jekyll-3.1.4/lib/jekyll.rb:174:in `<top (required)>'
@envygeeks

This comment has been minimized.

Show comment
Hide comment
@envygeeks

envygeeks May 19, 2016

Contributor

More importantly why do you need it to be sorted? If you need it sorted sounds to me like somebody somewhere is doing something wrong.

Contributor

envygeeks commented May 19, 2016

More importantly why do you need it to be sorted? If you need it sorted sounds to me like somebody somewhere is doing something wrong.

@parkr

This comment has been minimized.

Show comment
Hide comment
@parkr

parkr May 19, 2016

Member

@envygeeks I pasted the error just seconds before you posted your comment; you may have missed it. Sorry I didn't include it in the original post!

Member

parkr commented May 19, 2016

@envygeeks I pasted the error just seconds before you posted your comment; you may have missed it. Sorry I didn't include it in the original post!

@envygeeks

This comment has been minimized.

Show comment
Hide comment
@envygeeks

envygeeks May 19, 2016

Contributor

@parkr IMO we should just drop that magic and start doing require_relative through and through?

Contributor

envygeeks commented May 19, 2016

@parkr IMO we should just drop that magic and start doing require_relative through and through?

@envygeeks

This comment has been minimized.

Show comment
Hide comment
@envygeeks

envygeeks May 19, 2016

Contributor

What I mean is jekyll.rb loads everything with require_relative inside of jekyll/ and jekyll/drops.rb loads everything inside of jekyll/drops/, that will also solve people not wanting to load the entirety of Jekyll to get a single piece.

Contributor

envygeeks commented May 19, 2016

What I mean is jekyll.rb loads everything with require_relative inside of jekyll/ and jekyll/drops.rb loads everything inside of jekyll/drops/, that will also solve people not wanting to load the entirety of Jekyll to get a single piece.

@parkr

This comment has been minimized.

Show comment
Hide comment
@parkr

parkr May 19, 2016

Member

@envygeeks The funny thing is this has worked for ages... It's only just caused problems today. Why don't we just fix this as-is now and move to a better solution in v3.2.

What I mean is jekyll.rb loads everything with require_relative inside of jekyll/ and jekyll/drops.rb loads everything inside of jekyll/drops/, that will also solve people not wanting to load the entirety of Jekyll to get a single piece.

@envygeeks You mean every file requires its dependencies? That'll be a bit difficult to test, as we could easily miss dependencies... I'm a huge fan of the autoload route which loads things as needed.

Member

parkr commented May 19, 2016

@envygeeks The funny thing is this has worked for ages... It's only just caused problems today. Why don't we just fix this as-is now and move to a better solution in v3.2.

What I mean is jekyll.rb loads everything with require_relative inside of jekyll/ and jekyll/drops.rb loads everything inside of jekyll/drops/, that will also solve people not wanting to load the entirety of Jekyll to get a single piece.

@envygeeks You mean every file requires its dependencies? That'll be a bit difficult to test, as we could easily miss dependencies... I'm a huge fan of the autoload route which loads things as needed.

@envygeeks

This comment has been minimized.

Show comment
Hide comment
@envygeeks

envygeeks May 19, 2016

Contributor

Why don't we just fix this as-is now and move to a better solution in v3.2.

It's those kind of problems/push-offs that lead to what I'm about to say below... sadly.

You mean every file requires its dependencies? That'll be a bit difficult to test, as we could easily miss dependencies... I'm a huge fan of the autoload route which loads things as needed.

What do you mean? If you forget to have a dependency load... the tests for that dependency should fail and if they don't that's a problem in and of itself. It should fail the same way that currently does. If you fear that happening then I think all development need be stalled until the tests are brought up to snuff.

Contributor

envygeeks commented May 19, 2016

Why don't we just fix this as-is now and move to a better solution in v3.2.

It's those kind of problems/push-offs that lead to what I'm about to say below... sadly.

You mean every file requires its dependencies? That'll be a bit difficult to test, as we could easily miss dependencies... I'm a huge fan of the autoload route which loads things as needed.

What do you mean? If you forget to have a dependency load... the tests for that dependency should fail and if they don't that's a problem in and of itself. It should fail the same way that currently does. If you fear that happening then I think all development need be stalled until the tests are brought up to snuff.

@parkr

This comment has been minimized.

Show comment
Hide comment
@parkr

parkr May 19, 2016

Member

It's those kind of problems/push-offs that lead to what I'm about to say below... sadly.

This wasn't a problem before and I just want to get a 3.1.5 out the door tonight with a fix for the above NameError. Feel free to submit a PR to take this PR's place if you want.

If you forget to have a dependency load... the tests for that dependency should fail

I think we're talking past each other here – I mean that in our unit tests, these won't necessarily fail because one file could load, say Jekyll::Utils into the runtime, and cause us to miss that another file requires Jekyll::Utils but doesn't have the require_relative "./utils" or whatever. Either that, or our tests need to be remade so each file that's being tested is loaded by itself – currently we just load all of Jekyll so we'd miss if a file doesn't load in the right dependencies because we already loaded everything.

Member

parkr commented May 19, 2016

It's those kind of problems/push-offs that lead to what I'm about to say below... sadly.

This wasn't a problem before and I just want to get a 3.1.5 out the door tonight with a fix for the above NameError. Feel free to submit a PR to take this PR's place if you want.

If you forget to have a dependency load... the tests for that dependency should fail

I think we're talking past each other here – I mean that in our unit tests, these won't necessarily fail because one file could load, say Jekyll::Utils into the runtime, and cause us to miss that another file requires Jekyll::Utils but doesn't have the require_relative "./utils" or whatever. Either that, or our tests need to be remade so each file that's being tested is loaded by itself – currently we just load all of Jekyll so we'd miss if a file doesn't load in the right dependencies because we already loaded everything.

@envygeeks

This comment has been minimized.

Show comment
Hide comment
@envygeeks

envygeeks May 19, 2016

Contributor

I agree!

Contributor

envygeeks commented May 19, 2016

I agree!

@parkr parkr merged commit cafbd83 into 3.1-stable May 19, 2016

1 of 2 checks passed

continuous-integration/travis-ci/pr The Travis CI build is in progress
Details
continuous-integration/travis-ci/push The Travis CI build passed
Details

@parkr parkr deleted the 3.1-sort-includes branch May 19, 2016

@parkr parkr referenced this pull request May 19, 2016

Closed

Port changes in v3.1.4 & v3.1.5 & v3.1.6 forward #4911

8 of 8 tasks complete
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment