GithubHelp home page GithubHelp logo

broccoli-merge-trees's Introduction

broccoli-merge-trees

CI

Copy multiple trees of files on top of each other, resulting in a single merged tree.

Installation

npm install --save-dev broccoli-merge-trees

Usage

  • As a function call
const broccoliMergeTrees = require('broccoli-merge-trees');

let mergedNode = broccoliMergeTrees(inputNodes, options);
  • With new
const { MergeTrees } = require('broccoli-merge-trees');

let mergedNode = new MergeTrees(inputNodes, options);
  • inputNodes: An array of nodes, whose contents will be merged

  • options: A hash of options

Options

  • overwrite: By default, broccoli-merge-trees throws an error when a file exists in multiple nodes. If you pass { overwrite: true }, the output will contain the version of the file as it exists in the last input node that contains it.

  • annotation: A note to help tell multiple plugin instances apart.

  • destDir: A string representing the destination path that merged files will be copied to.

Example

If this is your Brocfile.js:

const mergeTrees = require('broccoli-merge-trees');

module.exports = function() {
  return mergeTrees(['public','scripts']);
};

And your project contains these files:

.
├─ public
│  ├─ index.html
│  └─ images
│     └─ logo.png
├─ scripts
│  └─ app.js
├─ Brocfile.js
…

Then running broccoli build the-output will generate this folder:

the-output
├─ app.js
├─ index.html
└─ images
   └─ logo.png

The parent folders, public and scripts in this case, are not included in the output. The output tree contains only the files within each folder, all mixed together.


If this is your Brocfile.js:

var BroccoliMergeTrees = require('broccoli-merge-trees');

module.exports = new BroccoliMergeTrees(['public', 'scripts'], {
    destDir: 'assets'
});

Then running broccoli build the-output will generate this folder:

the-output
└─ assets
    ├─ app.js
    ├─ index.html
    └─ images
    └─ logo.png

Contributing

Clone this repo and run the tests like so:

npm install
npm test

Issues and pull requests are welcome. If you change code, be sure to re-run npm test. Oftentimes it's useful to add or update tests as well.

broccoli-merge-trees's People

Contributors

csprocket777 avatar dependabot[bot] avatar hjdivad avatar indream avatar john-kurkowski avatar joliss avatar locks avatar roryokane avatar rwjblue avatar sparshithnr avatar stefanpenner avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

broccoli-merge-trees's Issues

`.DS_Store` + `overwrite: false` results in sadness

Getting :  [BroccoliMergeTrees] failed with:
Error: Merge error: file modules/profile/templates/.DS_Store exists in /Users/segupta/Dev/copy/voyager-web_trunk/tmp/broccoli_merge_trees-input_base_path-gSVm96mm.tmp/0 and /Users/segupta/Dev/copy/voyager-web_trunk/tmp/broccoli_merge_trees-input_base_path-gSVm96mm.tmp/1
Pass option { overwrite: true } to mergeTrees in order to have the latter file win.

Should we consider auto-ignoring this one? Is that a bad path to go down?

Anecdotally this is just mega annoying for OSX users, and with a small adjustment on our side it could become a non-problem.


Questions: Is this a one-time thing, or will there be more. If we decide this is appropriate, by what criteria do we accept/decline additions to this set.

Add option to not error on non-existing directories

It would be useful if there was an option (or even default behavior) with which merge-trees would ignore directories that do not exist.

For example, in a Brocfile we use for all projects, we use the directories [ 'lib', 'src', 'test', 'bin', 'bench' ]. These are not always applicable to each project, but in an effort to not have to change the Brocfile in every project, we are currently writing our own function that returns a merged tree for just the directories that exist.

I think it would make sense if this project supported that kind of a workflow. Thoughts?

Error: ENOENT: no such file or directory, stat

i’ve been moving some files around, so i would assume it’s from that

The Broccoli Plugin: [BroccoliMergeTrees] failed with:
Error: ENOENT: no such file or directory, stat '/Users/jedelman/workspace/voyager-web_trunk/tmp/broccoli_merge_trees-input_base_path-DQuSdorE.tmp/3/components/job-flavors.js'
    at Error (native)
    at Object.fs.statSync (fs.js:844:18)
    at buildEntry (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/index.js:339:17)
    at BroccoliMergeTrees._mergeRelativePath (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/index.js:247:19)
    at BroccoliMergeTrees._mergeRelativePath (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/index.js:300:31)
    at BroccoliMergeTrees.build (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/index.js:82:24)
    at /Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/read_compat.js:61:34
    at tryCatch (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/node_modules/promise-map-series/node_modules/rsvp/dist/rsvp.js:538:12)
    at invokeCallback (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/node_modules/promise-map-series/node_modules/rsvp/dist/rsvp.js:553:13)
    at publish (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/node_modules/promise-map-series/node_modules/rsvp/dist/rsvp.js:521:7)
    at flush (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/node_modules/promise-map-series/node_modules/rsvp/dist/rsvp.js:2373:5)
    at nextTickCallbackWith0Args (node.js:419:9)
    at process._tickCallback (node.js:348:13)

The broccoli plugin was instantiated at: 
    at BroccoliMergeTrees.Plugin (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/index.js:7:31)
    at new BroccoliMergeTrees (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/index.js:42:10)
    at BroccoliMergeTrees (/Users/jedelman/workspace/voyager-web_trunk/node_modules/broccoli-merge-trees/index.js:36:53)
    at CoreObject.buildChildAppTree (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-engines/lib/engine-addon.js:58:10)
    at CoreObject.buildEngineAppTree (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-engines/lib/engine-addon.js:123:40)
    at CoreObject.buildCompleteJSTree (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-engines/lib/engine-addon.js:186:42)
    at CoreObject.treeForEngine (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-engines/lib/engine-addon.js:277:50)
    at CoreObject.treeFor (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-engines/lib/engine-addon.js:644:25)
    at /Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-cli/lib/broccoli/ember-app.js:498:20
    at Array.map (native)
    at EmberApp.addonTreesFor (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-cli/lib/broccoli/ember-app.js:496:30)
    at EmberApp._addonTree (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-cli/lib/broccoli/ember-app.js:899:36)
    at EmberApp._processedVendorTree (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-cli/lib/broccoli/ember-app.js:944:20)
    at EmberApp._processedExternalTree (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-cli/lib/broccoli/ember-app.js:975:21)
    at EmberApp.appAndDependencies (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-cli/lib/broccoli/ember-app.js:1070:30)
    at EmberApp.javascript (/Users/jedelman/workspace/voyager-web_trunk/node_modules/ember-cli/lib/broccoli/ember-app.js:1199:34)

Symlinked Dirs Blow Up with `exists as a file in vendor but as a directory in tmp/`

Running into this with Ember CLI when I use bower link with a local package. The check here doesn't seem to think that symlinks can't be directories.

I poked about and found that the file in question is totally traversable and definitely a directory, but I don't know enough about filesystems to come up with a better way of checking.

Maybe related?
broccolijs/broccoli-kitchen-sink-helpers#3
ember-cli/ember-cli#565

Bug when attempting to merge precompiled and compiled versions of file together

I want to have both a preprocessed version of a file and the processed version output to the same directory.

Create this brocfile.js:

var
    Filter = require('broccoli-filter'),
    funnel = require('broccoli-funnel'),
    merge = require('broccoli-merge-trees')

function MyFilter(input, options) { Filter.call(this, input, options) }
MyFilter.prototype = Object.create(Filter.prototype)
MyFilter.prototype.extensions = [ 'filter-me' ]
MyFilter.prototype.targetExtension = 'txt'
MyFilter.prototype.processString = function(contents, relativePath) { return contents }

module.exports = merge([
    'assets',
    new MyFilter(funnel('assets/filter-these', { srcDir: '/', destDir: 'filter-these' }))
])

Then run:

npm install broccoli broccoli-filter broccoli-funnel broccoli-merge-trees
mkdir assets; mkdir assets/filter-these
touch assets/filter-these/x.filter-me assets/static.txt

broccoli build dist works. x.filter-me and x.txt appear side-by-side in dist/filter-these.

broccoli serve works at first, but then touch assets/static.txt and it breaks:

Built with error:
Error: Merge error: file filter-these/x.filter-me exists in /home/andy/broccoli-bug/tmp/broccoli_merge_trees-input_base_path-dR2gWTSy.tmp/0 and /home/andy/broccoli-bug/tmp/broccoli_merge_trees-input_base_path-dR2gWTSy.tmp/1
Pass option { overwrite: true } to mergeTrees in order to have the latter file win.
    at mergeRelativePath (/home/andy/broccoli-bug/node_modules/broccoli-merge-trees/index.js:118:19)
    at mergeRelativePath (/home/andy/broccoli-bug/node_modules/broccoli-merge-trees/index.js:142:15)
    at BroccoliMergeTrees.build (/home/andy/broccoli-bug/node_modules/broccoli-merge-trees/index.js:36:3)
    at /home/andy/broccoli-bug/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/read_compat.js:61:34
    at lib$rsvp$$internal$$tryCatch (/home/andy/broccoli-bug/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/node_modules/promise-map-series/node_modules/rsvp/dist/rsvp.js:493:16)
    at lib$rsvp$$internal$$invokeCallback (/home/andy/broccoli-bug/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/node_modules/promise-map-series/node_modules/rsvp/dist/rsvp.js:505:17)
    at lib$rsvp$$internal$$publish (/home/andy/broccoli-bug/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/node_modules/promise-map-series/node_modules/rsvp/dist/rsvp.js:476:11)
    at lib$rsvp$asap$$flush (/home/andy/broccoli-bug/node_modules/broccoli-merge-trees/node_modules/broccoli-plugin/node_modules/promise-map-series/node_modules/rsvp/dist/rsvp.js:1198:9)
    at process._tickCallback (node.js:355:11)

Overwrite tree

I try to rename and remove some files in the Ember-cli treeForPublic hook. I don't 100% understand this and added return mergeTrees([publicFiles], { overwrite: true }); to: https://github.com/martinic/ember-cli-deploy-build-plus/blob/robots/index.js#L14-L23

but this does not work. tree is always undef. The overwrite: true does not work. Is there an example that overwrites and perhaps deletes files? Any help is appreciated. See also http://discuss.emberjs.com/t/different-robots-txt-for-production-and-staging/9358/14

Option to concatenate files

I am currently trying to solve an issue where I am merging trees with files that have the same name and should be concatenated rather than overwritten. There are concat plugins for broccoli, but it seems like overkill for this use case. Since mergeTrees already has an option to overwrite files, would it make sense to have an option to concatenate the files as well?

Documentation question

The documentation reads:

The structure of output.js will be as follows:

// - header
// - ordered content of the files in headerFiles
// - un-ordered content of files matched by inputFiles, but not in headerFiles or footerFiles
// - ordered content of the files in footerFiles
// - footer

Does this mean that if I have:

inputFiles: ['fileA', 'fileB']

The order of fileA and fileB in the final outputted file is not guaranteed? If so, how can I guarantee the order is as specified in the inputFiles array?

Minor version update includes breaking changes

Since version 1.2.2 and 1.2.3 include breaking changes (no longer supports node<4.0 for example), should this be considered a major version change to 2.0.0?

A little context: our enterprise app is locked into an old version of ember-cli (1.13.8), which depends on this via ^1.x.x. A fresh npm install last night picked up the SyntaxError: Unexpected reserved word on class MergeTrees error that was breaking the broccoli-merge-trees travis builds.
Of course, if the project isn't following semantic versioning, feel free to close this.

TypeError: BroccoliMergeTrees (TreeMerger (lint app)): Expected Broccoli node, got [object Object] for inputNodes[2]

Hello,

I have an ember cli project that has been building fine for a while. Recently, I cleaner my node_modules and rebuilt and now when I build I get:

[jmat@NEADev nea-client]$ ./node_modules/ember-cli/bin/ember build
DEPRECATION: Overriding init without calling this._super is deprecated. Please call `this._super.init && this._super.init.apply(this, arguments);` addon: `ember-cli-htmlbars`
    at Function.Addon.lookup (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/ember-cli/lib/models/addon.js:1005:27)
Could not start watchman; falling back to NodeWatcher for file system events.
Visit http://ember-cli.com/user-guide/#watchman for more info.
⠋ BuildingBroccoliMergeTrees (TreeMerger (lint app)): Expected Broccoli node, got [object Object] for inputNodes[2]
TypeError: BroccoliMergeTrees (TreeMerger (lint app)): Expected Broccoli node, got [object Object] for inputNodes[2]
    at BroccoliMergeTrees.Plugin (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/broccoli-plugin/index.js:23:13)
    at new BroccoliMergeTrees (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/broccoli-merge-trees/index.js:42:10)
    at BroccoliMergeTrees (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/broccoli-merge-trees/index.js:36:53)
    at module.exports (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/ember-cli/lib/broccoli/merge-trees.js:8:14)
    at EmberApp.addonLintTree (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/ember-cli/lib/broccoli/ember-app.js:607:10)
    at EmberApp.lintTestTrees (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/ember-cli/lib/broccoli/ember-app.js:1158:24)
    at EmberApp.appTests (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/ember-cli/lib/broccoli/ember-app.js:1129:51)
    at EmberApp.test (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/ember-cli/lib/broccoli/ember-app.js:1115:26)
    at EmberApp.toArray (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/ember-cli/lib/broccoli/ember-app.js:1647:61)
    at EmberApp.toTree (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/ember-cli/lib/broccoli/ember-app.js:1662:30)

My dependencies are fixed (package.json):

  "devDependencies": {
    "bower-json": "0.8.1",
    "broccoli-asset-rev": "2.5.0",
    "broccoli-funnel": "1.0.9",
    "broccoli-merge-trees": "1.1.5",
    "ember-ajax": "2.5.2",
    "ember-cli": "2.9.1",
    "ember-cli-app-version": "1.0.0",
    "ember-cli-babel": "5.1.10",
    "ember-cli-dependency-checker": "1.3.0",
    "ember-cli-deprecation-workflow": "0.2.3",
    "ember-cli-htmlbars": "1.1.0",
    "ember-cli-htmlbars-inline-precompile": "0.3.6",
    "ember-cli-inject-live-reload": "1.4.0",
    "ember-cli-jquery-ui": "0.0.20",
    "ember-cli-jshint": "2.0.1",
    "ember-cli-preprocess-registry": "3.0.0",
    "ember-cli-qunit": "1.4.2",
    "ember-cli-release": "0.2.9",
    "ember-cli-sass": "5.3.1",
    "ember-cli-sri": "2.1.0",
    "ember-cli-uglify": "1.2.0",
    "ember-export-application-global": "1.0.5",
    "ember-legacy-controllers": "0.1.0",
    "ember-legacy-views": "0.2.0",
    "ember-load-initializers": "0.5.1",
    "ember-resolver": "2.0.3",
    "loader.js": "4.0.11",
    "mkdirp": "0.5.1",
    "phantomjs-prebuilt": "2.1.7",
    "read-installed": "4.0.3",
    "rimraf": "2.5.2",
    "underscore": "1.8.3"
  }

For broccoli-merge-trees I was using 1.1.4, but both it and 1.1.5 have the above error.

Building with --prod does not encounter the error:

[jmat@NEADev nea-client]$ ./node_modules/ember-cli/bin/ember build --prod
DEPRECATION: Overriding init without calling this._super is deprecated. Please call `this._super.init && this._super.init.apply(this, arguments);` addon: `ember-cli-htmlbars`
    at Function.Addon.lookup (/home/jmat/Work/Actual/nea-dev/nea-client/node_modules/ember-cli/lib/models/addon.js:1005:27)
Could not start watchman; falling back to NodeWatcher for file system events.
Visit http://ember-cli.com/user-guide/#watchman for more info.
⠹ Building[API] Warning: The .read and .rebuild APIs will stop working in the next Broccoli version
[API] Warning: Use broccoli-plugin instead: https://github.com/broccolijs/broccoli-plugin
[API] Warning: Plugin uses .read/.rebuild API: TemplateCompiler
cleaning up...
Built project successfully. Stored in "dist/".
File sizes:
 - nea-client-8853543fe4a50ac6d45694d047ab0866.css: 44.46 KB (9.56 KB gzipped)
 - nea-client.js: 954.26 KB (117.6 KB gzipped)
 - vendor-5e3f4ac1c90380b0275fb61126288f69.js: 1.51 MB (443.24 KB gzipped)
 - vendor-b1c6c9d4877bb9dd014fc44e4cdba9cd.css: 167.88 KB (30.93 KB gzipped)
[jmat@NEADev nea-client]$ 

Has anyone run into this? And if so, how do I fix it?

Thanks-

Merge error: Pass option { overwrite: true } to mergeTrees in order to have the latter file win.

After upgrading ember to 3.15.1

How pass overwrite: true to mergeTrees?

I found similar issue here #109, But I did not find a solution.

Error:

(node:7137) UnhandledPromiseRejectionWarning: Error: [BroccoliMergeTrees] error while merging the following:

  1. [BroccoliMergeTrees: Application Dist]
  2. [Funnel]
    Merge error: file assets/web-workers/web-worker.js exists in /tmp/broccoli-7137h4FQvjVBxXVy/out-543-broccoli_merge_trees_application_dist and /tmp/broccoli-7137h4FQvjVBxXVy/out-545-funnel
    Pass option { overwrite: true } to mergeTrees in order to have the latter file win.
    at MergeTrees._getMergedDirectory2 (/mnt/s/pr/pjc/ember-app/node_modules/ember-cli/node_modules/merge-trees/index.js:151:19)
    at MergeTrees._getMergedDirectory2 (/mnt/s/pr/pjc/ember-app/node_modules/ember-cli/node_modules/merge-trees/index.js:174:33)
    at MergeTrees._getMergedDirectory2 (/mnt/s/pr/pjc/ember-app/node_modules/ember-cli/node_modules/merge-trees/index.js:174:33)
    at MergeTrees._getMergedDirectory (/mnt/s/pr/pjc/ember-app/node_modules/ember-cli/node_modules/merge-trees/index.js:40:17)
    at MergeTrees.merge (/mnt/s/pr/pjc/ember-app/node_modules/ember-cli/node_modules/merge-trees/index.js:27:20)
    at BroccoliMergeTrees.build (/mnt/s/pr/pjc/ember-app/node_modules/ember-cli/node_modules/broccoli-merge-trees/index.js:36:21)
    at resolve (/mnt/s/pr/pjc/ember-app/node_modules/ember-cli/node_modules/broccoli/dist/wrappers/transform-node.js:68:45)
    at new Promise ()
    at TransformNodeWrapper.build (/mnt/s/pr/pjc/ember-app/node_modules/ember-cli/node_modules/broccoli/dist/wrappers/transform-node.js:53:16)
    at Promise.resolve.then.then.then (/mnt/s/pr/pjc/ember-app/node_modules/ember-cli/node_modules/broccoli/dist/builder.js:99:36)
    (node:7137) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 6)
    (node:7137) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Broccoli Merge Tree failing on Windows OS

This error is comming out when trying to build the EmberCLI app.
*Ember -v *
version: 1.13.13
node: 4.2.4
npm: 2.14.10
os: win32 x64

EINVAL: invalid argument, symlink 'D:\Workspaces\xxx\xxx\Core
xxx\xxxx\xxx\xxx-client-app\tmp\babel-output_path-oshgWKVn.tmp\xxx-
client-app\tests\integration\app-pods\components\xxxx\xxx\xxxx\component-test.jshint.js' -> 'D:\Workspaces
\xxxxx\xxx\xxx\xxx\xxxx\xxxx\tmp\bro
ccoli_merge_trees-output_path-BeD6edxd.tmp\xxx\tests\integration\app-
pods\components\xxx\xxxx\xxxx\component-test.jshint.js'

Then updated to Ember Cli v2.4.3
ember -v
ember-cli: 2.4.3
node: 4.2.4
os: win32 x64

ember build
Build failed.
The Broccoli Plugin: [BroccoliMergeTrees: TreeMerger (appTestTrees)] failed with:
Error: EINVAL: invalid argument, symlink 'file path' <- this length is 281 charachters.

Same error as before.

When the path name is more then 260 the error happens which is the max limit of the windows OS.
Is the broccoli not using the libUV beacuse i think that libUV would fix the problem.

EEXIST when a directory is created in two different input trees

This is coming from ember-cli/ember-cli#6236, which ultimately turned out to be an issue in broccoli-merge-trees.

When a directory with the same name is added at different times in two different input trees, the plugin ends up attempting to create a symlink where one already exists, resulting in an error like:

Error: EEXIST: file already exists, symlink '/Users/dfreeman/Desktop/broccoli-merge-failure/tmp/one/subdir/file1' -> '/var/folders/5x/vrw_v2r16vj3mftgg0h5_4640000gn/T/broccoli-96844FC3ATB2dAD1S/out-2-broccoli_merge_trees/subdir/file1'

A small reproduction of the issue (as minimal as I could come up with) is available here:
https://github.com/dfreeman/broccoli-merge-failure/blob/master/index.js

Incremental update misses changes in symlinks

Hi @stefanpenner, @hjdivad, @rwjblue,

I encountered the following bug: If there is a symlink in one of the input directories, say

input-dir-1/symlink -> /.../foo-dir

and it changes to point to a different directory, e.g.

input-dir-1/symlink -> /.../bar-dir

the output symlink isn't updated, i.e. it continues to be

output-dir/symlink -> /.../foo-dir

Between the logic in node-merge-trees and fs-tree-diff I'm pretty confused about where the problem is occurring, so I'm not submitting a test case here, but perhaps one of you lovely folks knows how to isolate (and fix) this problem?

NPM Test failure on OSX 10.9.2

As requested in IRC, cloning the repo and running "npm install; npm test" fails with the following output.

> [email protected] test /Users/edd/src/broccoli/broccoli-merge-trees
> jshint *.js test/*.js && tap --stderr --timeout 2 ./test/*_test.coffee

not ok ./test/tree_merger_test.coffee .................. 9/13
    Command: "coffee tree_merger_test.coffee"
    TAP version 13
    not ok 1 should be equivalent
      ---
        file:   /Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js
        line:   228
        column: 21
        stack:  
          - getCaller (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:418:17)
          - assert (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:21:16)
          - Function.equivalent (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:182:12)
          - Test._testAssert (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-test.js:87:16)
          - /Users/edd/src/broccoli/broccoli-merge-trees/test/tree_merger_test.coffee:20:22
          - invokeCallback (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:228:21)
          - publish (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:176:9)
          - publishFulfillment (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:312:5)
          - flush (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/asap.js:41:9)
          - process._tickCallback (node.js:415:13)
          - Function.Module.runMain (module.js:499:11)
          - startup (node.js:119:16)
          - node.js:901:3
          - 
        found:  
          bar: 1
          baz: 2
          foo: 1
        wanted: 
          foo: 1
          bar: 
            - foo
          baz: 2
        diff:   |
          {
            "bar" : �[34m�[1m"1"�[0m,�[36m�[1m // != ["foo"]�[0m
            "baz" : "2",
            "foo" : "1"
          }
      ...
    ok 2 should be similar
    not ok 3 should be equivalent
      ---
        file:   /Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js
        line:   228
        column: 21
        stack:  
          - getCaller (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:418:17)
          - assert (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:21:16)
          - Function.equivalent (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:182:12)
          - Test._testAssert (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-test.js:87:16)
          - /Users/edd/src/broccoli/broccoli-merge-trees/test/tree_merger_test.coffee:48:22
          - invokeCallback (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:228:21)
          - publish (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:176:9)
          - publishFulfillment (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:312:5)
          - flush (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/asap.js:41:9)
          - process._tickCallback (node.js:415:13)
          - Function.Module.runMain (module.js:499:11)
          - startup (node.js:119:16)
          - node.js:901:3
          - 
        found:  
          bar: 1b
          baz: 3
          foo: 1b
        wanted: 
          foo: 1b
          bar: 
            - foo
          baz: 3
        diff:   |
          {
            "bar" : �[34m�[1m"1b"�[0m,�[36m�[1m // != ["foo"]�[0m
            "baz" : "3",
            "foo" : "1b"
          }
      ...
    ok 4 should be equivalent
    ok 5 should be similar
    ok 6 should be similar
    not ok 7 should be similar
      ---
        file:    /Users/edd/src/broccoli/broccoli-merge-trees/test/tree_merger_test.coffee
        line:    72
        column:  9
        stack:   
          - getCaller (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:418:17)
          - Function.assert (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:21:16)
          - Function.similar (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:251:19)
          - Test._testAssert [as similar] (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-test.js:87:16)
          - assertError (/Users/edd/src/broccoli/broccoli-merge-trees/test/tree_merger_test.coffee:72:9)
          - invokeCallback (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:228:21)
          - publish (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:176:9)
          - publishRejection (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:318:5)
          - flush (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/asap.js:41:9)
          - process._tickCallback (node.js:415:13)
          - Function.Module.runMain (module.js:499:11)
          - startup (node.js:119:16)
          - node.js:901:3
          - 
        pattern: "/\"foo\" exists as a file in .* but as a directory in .*/"
        string:  ENOENT, no such file or directory 'tmp/fixture_tree-tmp_dest_dir-kH5csEby.tmp/foo'
        match:   ~
      ...
    ok 8 should be similar
    ok 9 should be similar
    ok 10 should be similar
    not ok 11 should be similar
      ---
        file:    /Users/edd/src/broccoli/broccoli-merge-trees/test/tree_merger_test.coffee
        line:    72
        column:  9
        stack:   
          - getCaller (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:418:17)
          - Function.assert (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:21:16)
          - Function.similar (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-assert.js:251:19)
          - Test._testAssert [as similar] (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/tap/lib/tap-test.js:87:16)
          - assertError (/Users/edd/src/broccoli/broccoli-merge-trees/test/tree_merger_test.coffee:72:9)
          - invokeCallback (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:228:21)
          - publish (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:176:9)
          - publishRejection (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/promise.js:318:5)
          - flush (/Users/edd/src/broccoli/broccoli-merge-trees/node_modules/rsvp/dist/commonjs/rsvp/asap.js:41:9)
          - process._tickCallback (node.js:415:13)
          - Function.Module.runMain (module.js:499:11)
          - startup (node.js:119:16)
          - node.js:901:3
          - 
        pattern: "/\"foo\" exists as a file in .* but as a directory in .*/"
        string:  ENOENT, no such file or directory 'tmp/fixture_tree-tmp_dest_dir-h4AJAInv.tmp/foo'
        match:   ~
      ...
    ok 12 should be similar
    ok 13 ./test/tree_merger_test.coffee

    1..13
    # tests 13
    # pass  9
    # fail  4

total .................................................. 9/13

not ok

npm ERR! weird error 4
npm ERR! not ok code 0

OS X: 10.9.2 (13C64)
Node: 0.10.21
NPM: 1.3.11

ENOTDIR bug?

Seeing the below error on Windows, and npm cache clean etc doesn't fix it.

You can reproduce by running ember build on shaunc/ember-grid@edaddd7

Is this a known bug?

Build failed.
ENOTDIR, not a directory 'G:\Projects\ember-grid\tmp\broccoli_merge_trees-input_
base_path-IfcH4Dsc.tmp\1'
Error: ENOTDIR, not a directory 'G:\Projects\ember-grid\tmp\broccoli_merge_trees
-input_base_path-IfcH4Dsc.tmp\1'
    at Error (native)
    at Object.fs.readdirSync (fs.js:765:18)
    at G:\Projects\ember-grid\node_modules\ember-cli\node_modules\broccoli-merge
-trees\index.js:35:19
    at Array.map (native)
    at mergeRelativePath (G:\Projects\ember-grid\node_modules\ember-cli\node_mod
ules\broccoli-merge-trees\index.js:33:28)
    at BroccoliMergeTrees.build (G:\Projects\ember-grid\node_modules\ember-cli\n
ode_modules\broccoli-merge-trees\index.js:26:3)
    at G:\Projects\ember-grid\node_modules\ember-cli\node_modules\broccoli-merge
-trees\node_modules\broccoli-plugin\read_compat.js:61:34
    at lib$rsvp$$internal$$tryCatch (G:\Projects\ember-grid\node_modules\ember-c
li\node_modules\rsvp\dist\rsvp.js:493:16)
    at lib$rsvp$$internal$$invokeCallback (G:\Projects\ember-grid\node_modules\e
mber-cli\node_modules\rsvp\dist\rsvp.js:505:17)
    at lib$rsvp$$internal$$publish (G:\Projects\ember-grid\node_modules\ember-cl
i\node_modules\rsvp\dist\rsvp.js:476:11)

deprecation warning on upgrade to 3.5.1

Hi my team recently upgraded to 3.5.1 and we started seeing this warning:

WARNING: Invalid Broccoli2 node detected, falling back to broccoli-builder. Broccoli error:
---------------
Object: The .read/.rebuild API is no longer supported as of Broccoli 1.0. Plugins must now derive from broccoli-plugin. https://github.com/broccolijs/broccoli/blob/master/docs/broccoli-1-0-plugin-api.md
used as input node to BroccoliMergeTrees (TreeMerger (app))
-~- created here: -~-
    at BroccoliMergeTrees.Plugin (/Users/wcanavan/code/Mariana-Django/ui/node_modules/broccoli-plugin/index.js:7:31)
    at new BroccoliMergeTrees (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/node_modules/broccoli-merge-trees/index.js:16:10)
    at Function.BroccoliMergeTrees [as _upstreamMergeTrees] (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/node_modules/broccoli-merge-trees/index.js:10:53)
    at mergeTrees (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/lib/broccoli/merge-trees.js:85:33)
    at EmberApp.getAppJavascript (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/lib/broccoli/ember-app.js:1022:21)
    at EmberApp.toArray (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/lib/broccoli/ember-app.js:1623:12)
    at EmberApp.toTree (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/lib/broccoli/ember-app.js:1750:36)
    at module.exports (/Users/wcanavan/code/Mariana-Django/ui/ember-cli-build.js:138:16)
    at Builder.readBuildFile (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/lib/models/builder.js:52:14)
    at Builder.setupBroccoliBuilder (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/lib/models/builder.js:66:22)
    at new Builder (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/lib/models/builder.js:32:10)
    at ServeTask.run (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/lib/tasks/serve.js:45:55)
    at Promise.resolve.then (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/lib/models/command.js:243:46)
    at tryCatcher (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:323:19)
    at invokeCallback (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:495:31)
    at /Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:559:14
    at flush (/Users/wcanavan/code/Mariana-Django/ui/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:2402:5)
    at process._tickCallback (internal/process/next_tick.js:61:11)

-~- (end) -~----------------

[API] Warning: The .read and .rebuild APIs will stop working in the next Broccoli version
[API] Warning: Use broccoli-plugin instead: https://github.com/broccolijs/broccoli-plugin
[API] Warning: Plugin uses .read/.rebuild API: [object Object]

I've read through ember-template-lint/ember-cli-template-lint#345, ember-cli/ember-cli#8198, broccolijs/broccoli#374, & ember-cli/ember-cli#8163 and tried upgrading or removing just about everything mentioned in any of them that is relevant to my application. Still, I haven't been able to figure out the source of the warning.

Is there anything in our package.json that is a known issue?

{
  "devDependencies": {
    "@ember/jquery": "^0.5.2",
    "@ember/optional-features": "^0.6.3",
    "babel-plugin-transform-decorators-legacy": "1.3.4",
    "babel-plugin-transform-object-rest-spread": "6.26.0",
    "broccoli-asset-rev": "^2.7.0",
    "broccoli-file-creator": "1.1.1",
    "c3": "0.4.21",
    "chalk": "2.3.2",
    "common-tags": "1.7.2",
    "d3": "3.5",
    "dotenv": "5.0.1",
    "ember-ajax": "^3.1.0",
    "ember-auto-import": "^1.2.13",
    "ember-changeset": "1.3.0",
    "ember-changeset-validations": "1.2.8",
    "ember-cli": "~3.5.1",
    "ember-cli-app-version": "^3.2.0",
    "ember-cli-autoprefixer": "0.8.1",
    "ember-cli-babel": "^6.16.0",
    "ember-cli-clock": "1.0.5",
    "ember-cli-code-coverage": "0.4.2",
    "ember-cli-content-security-policy": "1.0.0",
    "ember-cli-date-textbox": "1.1.0",
    "ember-cli-dependency-checker": "^3.0.0",
    "ember-cli-deploy": "1.0.2",
    "ember-cli-deploy-build": "1.1.1",
    "ember-cli-deploy-s3": "1.2.0",
    "ember-cli-eslint": "4.2.3",
    "ember-cli-file-saver": "1.2.2",
    "ember-cli-head": "0.4.0",
    "ember-cli-htmlbars": "^3.0.0",
    "ember-cli-htmlbars-inline-precompile": "^1.0.3",
    "ember-cli-inject-live-reload": "^1.8.2",
    "ember-cli-inline-content": "0.4.1",
    "ember-cli-mirage": "0.4.3",
    "ember-cli-moment-shim": "3.5.0",
    "ember-cli-release": "1.0.0-beta.2",
    "ember-cli-sass": "7.1.7",
    "ember-cli-shims": "^1.2.0",
    "ember-cli-sri": "^2.1.1",
    "ember-cli-string-helpers": "1.7.0",
    "ember-cli-stylelint": "2.2.0",
    "ember-cli-template-lint": "^1.0.0-beta.1",
    "ember-cli-uglify": "^2.1.0",
    "ember-component-attributes": "^0.1.1",
    "ember-component-css": "0.6.3",
    "ember-composable-helpers": "2.1.0",
    "ember-concurrency": "0.8.27",
    "ember-data": "~3.5.0",
    "ember-data-change-tracker": "0.7.3",
    "ember-did-change-attrs": "0.0.2",
    "ember-elsewhere": "1.0.4",
    "ember-exam": "1.0.0",
    "ember-export-application-global": "2.0.0",
    "ember-flatpickr": "2.3.0",
    "ember-freestyle": "0.10.0",
    "ember-fullcalendar": "1.8.0",
    "ember-get-config": "0.2.4",
    "ember-in-viewport": "3.0.0",
    "ember-inflector": "3.0.0",
    "ember-lifeline": "2.0.0",
    "ember-light-table": "1.13.2",
    "ember-link-action": "0.0.38",
    "ember-load-initializers": "^1.1.0",
    "ember-lodash": "4.18.0",
    "ember-moment": "7.6.0",
    "ember-multiselect-checkboxes": "0.11.1",
    "ember-native-dom-helpers": "0.6.2",
    "ember-power-select": "2.0.9",
    "ember-power-select-typeahead": "0.7.2",
    "ember-power-select-with-create": "0.6.1",
    "ember-promise-helpers": "1.0.6",
    "ember-qunit": "^3.4.1",
    "ember-qunit-nice-errors": "1.2.0",
    "ember-radio-button": "1.2.4",
    "ember-resolver": "^5.0.1",
    "ember-responds-to": "1.5.0",
    "ember-responsive": "2.0.8",
    "ember-route-action-helper": "2.0.6",
    "ember-simple-auth": "1.8.2",
    "ember-sinon": "1.0.1",
    "ember-sinon-qunit": "2.1.0",
    "ember-sortable": "1.11.2",
    "ember-source": "~3.5.1",
    "ember-test-selectors": "0.3.8",
    "ember-tooltips": "2.11.1",
    "ember-truth-helpers": "2.0.0",
    "ember-useragent": "0.5.0",
    "ember-websockets": "7.1.1",
    "ember-window-mock": "0.4.0",
    "eslint": "4.18.2",
    "eslint-config-airbnb-base": "11.3.2",
    "eslint-config-ember": "0.3.0",
    "eslint-config-mariana": "git+https://[email protected]/Mariana-Tek/eslint-config-mariana.git#v1.0.1",
    "eslint-plugin-compat": "2.2.0",
    "eslint-plugin-ember": "^5.2.0",
    "eslint-plugin-import": "2.9.0",
    "eslint-plugin-mariana-tek": "git+https://[email protected]/Mariana-Tek/eslint-plugin-mariana-tek.git#v1.0.0",
    "fs": "0.0.1-security",
    "intl": "1.2.5",
    "jquery.cardswipe": "1.3.0",
    "keyevent": "1.1.0",
    "loader.js": "^4.7.0",
    "moment-duration-format": "1.3.0",
    "path": "0.12.7",
    "qunit-dom": "^0.8.0",
    "request": "2.83.0",
    "request-promise-native": "1.0.5",
    "require-environment-variables": "1.1.2",
    "rsvp": "4.8.2",
    "semantic-ui-nag": "2.3.0",
    "stylelint": "9.10.1",
    "stylelint-config-standard": "18.2.0",
    "stylelint-declaration-strict-value": "1.1.2",
    "stylelint-order": "2.2.1",
    "sugar-date": "2.0.4",
    "svgstore": "2.0.3"
  },
  "ember-addon": {
    "paths": [
      "lib/@mariana/svgstore-inline",
      "lib/ember-cli-deploy-mariana"
    ]
  },
  "dependencies": {
    "chai": "4.1.2",
    "ember-cli-sentry": "3.0.0",
    "jQuery-Scanner-Detection": "1.2.1",
    "mock-socket": "^8.0.5",
    "urijs": "1.19.1"
  }
}

Let me know if I can provide any more information that would be helpful.

potential issue with my latest work

➜  asdfasdf git:(master) ✗ ember s
version: 1.13.11
Warning: failed to stat /Users/stefanpenner/tmp/asdfasdf/node_modules/broccoli-merge-trees/tmp/broccoli_merge_trees-input_base_path-00NVlxQx.tmp/0

will investigate in the next day or so (this is unreleased and on master)

Merge error: "intro.js" exists as a file in tmp/main_file_picker-tmp_dest_dir-9puBDv4G.tmp but as a directory in vendor

Not sure the best place to submit this issue; though this seems like the right repo. I'm in the beginning stages of porting the Ember part of a Rails app over to ember-cli and when I tried to bower install --save intro.js the build began to fail with this error:

Merge error: "intro.js" exists as a file in tmp/main_file_picker-tmp_dest_dir-9puBDv4G.tmp but as a directory in vendor

I think this is b/c jquery has a file called intro.js and this repo is somehow combining all the directories in vendor that results in a conflict between that file and the library intro.js.

This is the brocfile:

/* global require, module */

var EmberApp = require('ember-cli/lib/broccoli/ember-app');
var instrument  = require('broccoli-debug').instrument;
var pickFiles   = require('broccoli-static-compiler');
var mergeTrees  = require('broccoli-merge-trees');

var app = new EmberApp({
  name: require('./package.json').name,

  legacyFilesToAppend: [
    'jquery.js',
    'jquery.layout/dist/jquery.layout-latest.min.js',
    'handlebars.js',
    'ember.js',
    'ic-ajax/dist/named-amd/main.js',
    'ember-data.js',
    'app-shims.js',
    'ember-resolver.js',
    'ember-load-initializers.js'
  ],

  // AKA whitelisted modules
  ignoredModules: [
    'ember',
    'ember/resolver',
    'ember/load-initializers',
    'ic-ajax'
  ],

  // hack we can hopefully remove as the addon system improves
  importWhitelist: {
    'ember': ['default'],
    'ember/resolver': ['default'],
    'ember/load-initializers': ['default']
  },

  // hack
  getEnvJSON: require('./config/environment')
});

var emberApp = app.toTree();
instrument.print(emberApp);

var jqueryLayoutStyles = pickFiles('vendor', {
  srcDir: '/jquery.layout/dist',
  destDir: '/assets/',
  files: [
    'layout-default-latest.css'
  ]
});

instrument.print(jqueryLayoutStyles);

var appAndCustomDependencies = mergeTrees([
  emberApp, jqueryLayoutStyles//, sassTree
], { overwrite: true });


module.exports = appAndCustomDependencies;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.