Great! We'll get this into the next release.

Christian

On Wed, Jun 14, 2017 at 11:15 AM, Kevin Yu <[email protected]> wrote:

> Thank you very much Christian! I used your patch and can confirm it's
> working now!
>
> Much appreciated
>
> On Tuesday, June 13, 2017 at 4:52:13 PM UTC-7, Christian Hammond wrote:
>>
>> The patch here should take care of this problem: https://reviews.revie
>> wboard.org/r/9014/
>>
>> Christian
>>
>> On Tue, Jun 13, 2017 at 4:04 PM, Christian Hammond <
>> [email protected]> wrote:
>>
>>> We don't want to remove them, because it's important to use the ones
>>> specified by Review Board and not the system-provided ones.
>>>
>>> I have a repro case, so I'll dig into this.
>>>
>>> Christian
>>>
>>> On Tue, Jun 13, 2017 at 12:37 PM, Alexander Galperin <
>>> [email protected]> wrote:
>>>
>>>> Actually,adding pipeline_settings.PIPELINE_LESS_BINARY and
>>>> pipeline_settings.PIPELINE_UGLIFYJS_BINARY to packaging.py is not
>>>> nesessary.
>>>> Without these settings the default pipeline setting will be
>>>> used,('/usr/bin/env lessc','/usr/bin/env uglifyjs') and it has less and
>>>> uglify execs.
>>>> so the only need to remove these attributes from ReviewBoard settings.
>>>>
>>>>
>>>> On Tuesday, June 13, 2017 at 12:19:24 PM UTC-7, Alexander Galperin
>>>> wrote:
>>>>>
>>>>> Thank you Christian,
>>>>> Definitely these 2 statements are needed. But it still did not worked
>>>>> I found that these values overwritten in a loop in the
>>>>> packaging.py/_build_static_media(extention),because ReviewBoard
>>>>> settings, has attributes PIPELINE_LESS_BINARY and  
>>>>> PIPELINE_UGLIFYJS_BINARY:
>>>>>         from pipeline.conf import settings as pipeline_settings
>>>>>
>>>>>         for key in six.iterkeys(pipeline_settings.__dict__):
>>>>>             if hasattr(settings, key):
>>>>>                 setattr(pipeline_settings, key, getattr(settings, key))
>>>>>
>>>>> So, I modified /usr/local/lib/python2.7/dist-packages/ReviewBoard-
>>>>> 2.5.12.dev0-py2.7.egg/reviewboard/settings.py, by removing these 2
>>>>> attributes, and it works now:
>>>>> # Static media setup
>>>>> from reviewboard.staticbundles import PIPELINE_CSS, PIPELINE_JS
>>>>>
>>>>> NODE_PATH = os.path.join(REVIEWBOARD_ROOT, '..', 'node_modules')
>>>>>
>>>>> # PIPELINE_LESS_BINARY = os.path.join(NODE_PATH, 'less', 'bin',
>>>>> 'lessc')
>>>>> # PIPELINE_UGLIFYJS_BINARY = os.path.join(NODE_PATH, 'uglifyjs', 'bin',
>>>>> #                                        'uglifyjs')
>>>>>
>>>>>
>>>>>
>>>>> On Monday, June 12, 2017 at 6:13:39 PM UTC-7, Christian Hammond wrote:
>>>>>>
>>>>>> I think I see where the problem is. I'm confused as to why I'm not
>>>>>> hitting the same failure case, but I honestly don't have a lot of time to
>>>>>> dig into it right now.
>>>>>>
>>>>>> In install_pipeline_deps, try doing:
>>>>>>
>>>>>>             pipeline_settings.LESS_BINARY = \
>>>>>>                 os.path.join(node_modules_dir, 'less', 'bin', 'lessc')
>>>>>>             pipeline_settings.PIPELINE_LESS_BINARY = \
>>>>>>                 pipeline_settings.LESS_BINARY
>>>>>>
>>>>>> ...
>>>>>>
>>>>>>             pipeline_settings.UGLIFYJS_BINARY = \
>>>>>>                 os.path.join(node_modules_dir, 'uglifyjs', 'bin',
>>>>>> 'uglifyjs')
>>>>>>             pipeline_settings.PIPELINE_UGLIFYJS_BINARY = \
>>>>>>                 pipeline_settings.UGLIFYJS_BINARY
>>>>>>
>>>>>>
>>>>>> (Adding the second statement in each batch)
>>>>>>
>>>>>> See if that gets you any further.
>>>>>>
>>>>>> Christian
>>>>>>
>>>>>> On Mon, Jun 12, 2017 at 6:03 PM, Alexander Galperin <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Set in packaging.py:
>>>>>>> # Collect and process all static media files.
>>>>>>>        * print 'PIPELINE_LESS_BINARY1 =
>>>>>>> {}'.format(pipeline_settings.LESS_BINARY)*
>>>>>>> *        print 'PIPELINE_UGLIFYJS_BINARY1 =
>>>>>>> {}'.format(pipeline_settings.UGLIFYJS_BINARY)*
>>>>>>>         call_command('collectstatic', interactive=False, verbosity=2)
>>>>>>>
>>>>>>> Output is good:
>>>>>>> PIPELINE_LESS_BINARY1 = /src2/rb-extension-pack/fortin
>>>>>>> et/build/node_modules/less/bin/lessc
>>>>>>> PIPELINE_UGLIFYJS_BINARY1 = /src2/rb-extension-pack/fortin
>>>>>>> et/build/node_modules/uglifyjs/bin/uglifyjs
>>>>>>>
>>>>>>>
>>>>>>> On Monday, June 12, 2017 at 5:51:13 PM UTC-7, Alexander Galperin
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Set print in /usr/local/lib/python2.7/di
>>>>>>>> st-packages/pipeline/compressors/uglifyjs.py:
>>>>>>>> class UglifyJSCompressor(SubProcessCompressor):
>>>>>>>>     def compress_js(self, js):
>>>>>>>>         *print 'PIPELINE_SETTING_UGLIFYJS_BINARY =
>>>>>>>> {}'.format(settings.PIPELINE_UGLIFYJS_BINARY)*
>>>>>>>>         command = '%s %s' % (settings.PIPELINE_UGLIFYJS_BINARY,
>>>>>>>> settings.PIPELINE_UGLIFYJS_ARGUMENTS)
>>>>>>>>         if self.verbose:
>>>>>>>>             command += ' --verbose'
>>>>>>>>         return self.execute_command(command, js)
>>>>>>>> output:
>>>>>>>> PIPELINE_SETTING_UGLIFYJS_BINARY = /usr/local/lib/python2.7/dist-
>>>>>>>> packages/ReviewBoard-2.5.12.dev0-py2.7.egg/reviewboard/../no
>>>>>>>> de_modules/uglifyjs/bin/uglifyjs
>>>>>>>>  And it takes from 'settings', which probably is wrong
>>>>>>>>
>>>>>>>> I will try to stop in call_command
>>>>>>>>
>>>>>>>>
>>>>>>>> On Monday, June 12, 2017 at 5:37:29 PM UTC-7, Christian Hammond
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Can you also try placing debugging output right before the
>>>>>>>>> "call_command('collectstatic', ...)" command in _build_static_media?
>>>>>>>>>
>>>>>>>>> Along with this, try printing `command` in
>>>>>>>>> pipeline/compilers/less.py (pipeline will be another module in
>>>>>>>>> site-packages somewhere, perhaps under a django-pipeline-* directory).
>>>>>>>>>
>>>>>>>>> Christian
>>>>>>>>>
>>>>>>>>> On Mon, Jun 12, 2017 at 5:22 PM, Alexander Galperin <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> I've put some print in packaging.py to help debugging. Here's
>>>>>>>>>> what I have changed:
>>>>>>>>>>  def install_pipeline_deps(self, extension, css_bundles,
>>>>>>>>>> js_bundles):
>>>>>>>>>> ...
>>>>>>>>>> ...
>>>>>>>>>>         with open(package_file, 'w') as fp:
>>>>>>>>>>             fp.write(json.dumps(
>>>>>>>>>>                 {
>>>>>>>>>>                     'name': '%s-extension' %
>>>>>>>>>> os.path.basename(os.getcwd()),
>>>>>>>>>>                     'private': 'true',
>>>>>>>>>>                     'devDependencies': {},
>>>>>>>>>>                     'dependencies': dependencies,
>>>>>>>>>>                 },
>>>>>>>>>>                 indent=2))
>>>>>>>>>>
>>>>>>>>>>         old_cwd = os.getcwd()
>>>>>>>>>>         os.chdir(build_dir)
>>>>>>>>>> *        print 'PIPELINE_LESS_BINARY =
>>>>>>>>>> {}'.format(pipeline_settings.LESS_BINARY)*
>>>>>>>>>> *        print 'PIPELINE_UGLIFYJS_BINARY =
>>>>>>>>>> {}'.format(pipeline_settings.UGLIFYJS_BINARY)*
>>>>>>>>>>         self.npm_install()
>>>>>>>>>>
>>>>>>>>>> And the output is:
>>>>>>>>>> PIPELINE_LESS_BINARY = /src2/rb-extension-pack/fortinet/build/
>>>>>>>>>> node_modules/less/bin/lessc
>>>>>>>>>> PIPELINE_UGLIFYJS_BINARY = /src2/rb-extension-pack/fortinet/build
>>>>>>>>>> /node_modules/uglifyjs/bin/uglifyjs
>>>>>>>>>>
>>>>>>>>>> Also build/node_modules.. created in extention directory, so the
>>>>>>>>>> path is correct at this point
>>>>>>>>>>
>>>>>>>>>> On Monday, June 12, 2017 at 5:17:15 PM UTC-7, Christian Hammond
>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Hi Kevin,
>>>>>>>>>>>
>>>>>>>>>>> printing in settings.py won't tell you anything of value. Those
>>>>>>>>>>> are the correct locations at the time that settings.py loaded, but 
>>>>>>>>>>> they're
>>>>>>>>>>> overridden during the packaging process. The locations mentioned in 
>>>>>>>>>>> my
>>>>>>>>>>> previous e-mail are where that happens. Solving this will require 
>>>>>>>>>>> narrowing
>>>>>>>>>>> down the locations where the path is correct and where it's 
>>>>>>>>>>> incorrect in
>>>>>>>>>>> that process.
>>>>>>>>>>>
>>>>>>>>>>> Christian
>>>>>>>>>>>
>>>>>>>>>>> On Mon, Jun 12, 2017 at 2:49 PM, Kevin Yu <[email protected]>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Christian,
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks for trying out. I also did some debugging to see if I
>>>>>>>>>>>> can find any information. I added some print in the settings.py
>>>>>>>>>>>>
>>>>>>>>>>>> PIPELINE_LESS_BINARY = os.path.join(NODE_PATH, 'less', 'bin',
>>>>>>>>>>>> 'lessc')
>>>>>>>>>>>> PIPELINE_UGLIFYJS_BINARY = os.path.join(NODE_PATH, 'uglifyjs',
>>>>>>>>>>>> 'bin',
>>>>>>>>>>>>                                         'uglifyjs')
>>>>>>>>>>>> print 'PIPELINE_UGLIFYJS_BINARY = {}'.format(PIPELINE_UGLIFYJS_B
>>>>>>>>>>>> INARY)
>>>>>>>>>>>> print 'PIPELINE_LESS_BINARY = {}'.format(PIPELINE_LESS_BINARY)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> And this is what I see in the log:
>>>>>>>>>>>>
>>>>>>>>>>>> [Mon Jun 12 14:47:50.821618 2017] [:error] [pid 12918:tid
>>>>>>>>>>>> 140227234481920] PIPELINE_UGLIFYJS_BINARY = 
>>>>>>>>>>>> /usr/local/lib/python2.7/dist-
>>>>>>>>>>>> packages/ReviewBoard-2.5.12-py2.7.egg/reviewboard/../node_mo
>>>>>>>>>>>> dules/uglifyjs/bin/uglifyjs
>>>>>>>>>>>> [Mon Jun 12 14:47:50.821692 2017] [:error] [pid 12918:tid
>>>>>>>>>>>> 140227234481920] PIPELINE_LESS_BINARY = 
>>>>>>>>>>>> /usr/local/lib/python2.7/dist-
>>>>>>>>>>>> packages/ReviewBoard-2.5.12-py2.7.egg/reviewboard/../node_mo
>>>>>>>>>>>> dules/less/bin/lessc
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Saturday, June 10, 2017 at 1:43:26 AM UTC-7, Christian
>>>>>>>>>>>> Hammond wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Right. We override this though in
>>>>>>>>>>>>> djblets/extensions/packaging.py in install_pipeline_deps().
>>>>>>>>>>>>> We compute the path to the extension's node_modules and its 
>>>>>>>>>>>>> lessc, and we
>>>>>>>>>>>>> set that in settings.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I tested locally and it's performing as expected for me.
>>>>>>>>>>>>> Review Board's lessc isn't being used, but the extension's is. So
>>>>>>>>>>>>> something's going wrong here with the paths.
>>>>>>>>>>>>>
>>>>>>>>>>>>> How comfortable are you debugging Python? I'm curious as to
>>>>>>>>>>>>> whether pipeline_settings.LESS_BINARY in install_pipeline_deps() 
>>>>>>>>>>>>> is being
>>>>>>>>>>>>> correctly set.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Christian
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Fri, Jun 9, 2017 at 5:51 PM, Kevin Yu <[email protected]>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Looks like the path to the npm_modules are prepopulated based
>>>>>>>>>>>>>> on the following code in settings.py:
>>>>>>>>>>>>>> # Static media setup
>>>>>>>>>>>>>> if RUNNING_TEST:
>>>>>>>>>>>>>>    PIPELINE_COMPILERS = []
>>>>>>>>>>>>>> else:
>>>>>>>>>>>>>>    PIPELINE_COMPILERS = [
>>>>>>>>>>>>>>        'djblets.pipeline.compilers.es6.ES6Compiler',
>>>>>>>>>>>>>>        'djblets.pipeline.compilers.less.LessCompiler',
>>>>>>>>>>>>>>    ]
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> NODE_PATH = os.path.join(REVIEWBOARD_ROOT, '..', '
>>>>>>>>>>>>>> node_modules')
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Friday, June 9, 2017 at 5:44:51 PM UTC-7, Kevin Yu wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks Christian for the quick reply! much appreciated.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> It was installed using easy_install under Ubuntu.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Friday, June 9, 2017 at 5:38:11 PM UTC-7, Christian
>>>>>>>>>>>>>>> Hammond wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hi Kevin,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I actually don't believe this is related in this case. It
>>>>>>>>>>>>>>>> looks like the extension packaging stage is trying to locate 
>>>>>>>>>>>>>>>> the lessc path
>>>>>>>>>>>>>>>> relative to Review Board, which is not correct. It should be 
>>>>>>>>>>>>>>>> locating it
>>>>>>>>>>>>>>>> from the extension package. It sets the path prior to building 
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> extension to the place in your tree, which, based on that 
>>>>>>>>>>>>>>>> output, should be
>>>>>>>>>>>>>>>> populated...
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I have to run right now, but let me play around with this
>>>>>>>>>>>>>>>> when I get back and see if I can reproduce this.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> In the meantime, how do you install Review Board? Are you
>>>>>>>>>>>>>>>> using easy_install or yum?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Christian
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Fri, Jun 9, 2017 at 5:34 PM, Kevin Yu <[email protected]
>>>>>>>>>>>>>>>> > wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I just saw on https://www.reviewboard.org
>>>>>>>>>>>>>>>>> /docs/manual/dev/extending/extensions/static-files/, it
>>>>>>>>>>>>>>>>> says
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Static bundles are packaged along with your extension
>>>>>>>>>>>>>>>>> automatically. You don’t have to do anything special. You 
>>>>>>>>>>>>>>>>> will, however,
>>>>>>>>>>>>>>>>> need some node.js <https://nodejs.org/> dependencies in
>>>>>>>>>>>>>>>>> order to package static media bundles.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *If you’re running Review Board 2.5.7+, these dependencies
>>>>>>>>>>>>>>>>> will be installed for you when you begin to build the 
>>>>>>>>>>>>>>>>> package.*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> *If you’re running an older version, you will need to
>>>>>>>>>>>>>>>>> manually install them yourself. First, make sure you have a 
>>>>>>>>>>>>>>>>> modern version
>>>>>>>>>>>>>>>>> of node.js installed and then run:*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> $ sudo npm install -g less uglifyjs
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I am wondering if this is related...
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Friday, June 9, 2017 at 4:41:10 PM UTC-7, Kevin Yu
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On our server, we had reviewboard core 2.5.6.1 running
>>>>>>>>>>>>>>>>>> with our own extension. it was all fine until we recently 
>>>>>>>>>>>>>>>>>> upgraded
>>>>>>>>>>>>>>>>>> reviewboard core to 2.5.12. After the upgrade, we can't run 
>>>>>>>>>>>>>>>>>> python setup.py
>>>>>>>>>>>>>>>>>> -v build anymore... The error is as follows:
>>>>>>>>>>>>>>>>>> devops@Reviewboard-Test-trunk:/tmp/ReviewBoardExt$
>>>>>>>>>>>>>>>>>> python setup.py -v build
>>>>>>>>>>>>>>>>>> running build
>>>>>>>>>>>>>>>>>> running build_py
>>>>>>>>>>>>>>>>>> running build_static_files
>>>>>>>>>>>>>>>>>> Installing node packages...
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/uglifyjs/2.4.10
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/less/2.7.1
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/less/2.7.1
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/uglifyjs/2.4.10
>>>>>>>>>>>>>>>>>> npm WARN deprecated [email protected]: uglifyjs is
>>>>>>>>>>>>>>>>>> deprecated - use uglify-js instead.
>>>>>>>>>>>>>>>>>> npm WARN engine [email protected]: wanted: {"node":">=0.12"}
>>>>>>>>>>>>>>>>>> (current: {"node":"v0.10.25","npm":"1.3.10"})
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/source-map/0.1.34
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/yargs
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/async
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/ugl
>>>>>>>>>>>>>>>>>> ify-to-browserify
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/source-map/0.1.34
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/yargs
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/async
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/ugl
>>>>>>>>>>>>>>>>>> ify-to-browserify
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/amdefine
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/amdefine
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/errno
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/graceful-fs
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/image-size
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/mime
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/mkdirp
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/promise
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/source-map
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/errno
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/graceful-fs
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/image-size
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/mime
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/promise
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/source-map
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/mkdirp
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/prr
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/prr
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/minimist/0.0.8
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/minimist/0.0.8
>>>>>>>>>>>>>>>>>> npm http GET https://registry.npmjs.org/asap
>>>>>>>>>>>>>>>>>> npm http 304 https://registry.npmjs.org/asap
>>>>>>>>>>>>>>>>>> [email protected] node_modules/uglifyjs
>>>>>>>>>>>>>>>>>> ├── [email protected]
>>>>>>>>>>>>>>>>>> ├── [email protected]
>>>>>>>>>>>>>>>>>> ├── [email protected]
>>>>>>>>>>>>>>>>>> └── [email protected] ([email protected])
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> [email protected] node_modules/less
>>>>>>>>>>>>>>>>>> ├── [email protected]
>>>>>>>>>>>>>>>>>> ├── [email protected]
>>>>>>>>>>>>>>>>>> ├── [email protected]
>>>>>>>>>>>>>>>>>> ├── [email protected] ([email protected])
>>>>>>>>>>>>>>>>>> ├── [email protected] ([email protected])
>>>>>>>>>>>>>>>>>> ├── [email protected] ([email protected])
>>>>>>>>>>>>>>>>>> └── [email protected]
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/css/rev_req_det.less'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/account_handler.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/branch_builds.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/bootstrap.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/apprreqView.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/test_cvrg_rprt.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/ftnchkHoldItView.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/sel_rqst_4_det_copy.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/approval_status_View.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/dashboard.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/rqst_descr.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/js/views/cm_portalView.js'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/Remove.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/fortinet.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/teamlead.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/favicon_notify.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/Create.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/ftnt.ico'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/shipit-grey.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/Up.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/Bottom.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/stop16.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/shipit.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/Down.png'
>>>>>>>>>>>>>>>>>> Copying '/tmp/ReviewBoardExt/fortinet/
>>>>>>>>>>>>>>>>>> static/images/[email protected]'
>>>>>>>>>>>>>>>>>> Traceback (most recent call last):
>>>>>>>>>>>>>>>>>>   File "setup.py", line 27, in <module>
>>>>>>>>>>>>>>>>>>     'evolutions/*.*',
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/ReviewBoard-2.5.12-
>>>>>>>>>>>>>>>>>> py2.7.egg/reviewboard/extensions/packaging.py", line 48,
>>>>>>>>>>>>>>>>>> in setup
>>>>>>>>>>>>>>>>>>     setuptools_setup(**setup_kwargs)
>>>>>>>>>>>>>>>>>>   File "/usr/lib/python2.7/distutils/core.py", line 151,
>>>>>>>>>>>>>>>>>> in setup
>>>>>>>>>>>>>>>>>>     dist.run_commands()
>>>>>>>>>>>>>>>>>>   File "/usr/lib/python2.7/distutils/dist.py", line 953,
>>>>>>>>>>>>>>>>>> in run_commands
>>>>>>>>>>>>>>>>>>     self.run_command(cmd)
>>>>>>>>>>>>>>>>>>   File "/usr/lib/python2.7/distutils/dist.py", line 972,
>>>>>>>>>>>>>>>>>> in run_command
>>>>>>>>>>>>>>>>>>     cmd_obj.run()
>>>>>>>>>>>>>>>>>>   File "/usr/lib/python2.7/distutils/command/build.py",
>>>>>>>>>>>>>>>>>> line 128, in run
>>>>>>>>>>>>>>>>>>     self.run_command(cmd_name)
>>>>>>>>>>>>>>>>>>   File "/usr/lib/python2.7/distutils/cmd.py", line 326,
>>>>>>>>>>>>>>>>>> in run_command
>>>>>>>>>>>>>>>>>>     self.distribution.run_command(command)
>>>>>>>>>>>>>>>>>>   File "/usr/lib/python2.7/distutils/dist.py", line 972,
>>>>>>>>>>>>>>>>>> in run_command
>>>>>>>>>>>>>>>>>>     cmd_obj.run()
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/Djblets-0.9.7-py2.7.
>>>>>>>>>>>>>>>>>> egg/djblets/extensions/packaging.py", line 422, in run
>>>>>>>>>>>>>>>>>>     self.run_command('build_static_files')
>>>>>>>>>>>>>>>>>>   File "/usr/lib/python2.7/distutils/cmd.py", line 326,
>>>>>>>>>>>>>>>>>> in run_command
>>>>>>>>>>>>>>>>>>     self.distribution.run_command(command)
>>>>>>>>>>>>>>>>>>   File "/usr/lib/python2.7/distutils/dist.py", line 972,
>>>>>>>>>>>>>>>>>> in run_command
>>>>>>>>>>>>>>>>>>     cmd_obj.run()
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/Djblets-0.9.7-py2.7.
>>>>>>>>>>>>>>>>>> egg/djblets/extensions/packaging.py", line 290, in run
>>>>>>>>>>>>>>>>>>     self._build_static_media(extension)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/Djblets-0.9.7-py2.7.
>>>>>>>>>>>>>>>>>> egg/djblets/extensions/packaging.py", line 360, in
>>>>>>>>>>>>>>>>>> _build_static_media
>>>>>>>>>>>>>>>>>>     call_command('collectstatic', interactive=False,
>>>>>>>>>>>>>>>>>> verbosity=2)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/Django-1.6.11-py2.7.
>>>>>>>>>>>>>>>>>> egg/django/core/management/__init__.py", line 159, in
>>>>>>>>>>>>>>>>>> call_command
>>>>>>>>>>>>>>>>>>     return klass.execute(*args, **defaults)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/Django-1.6.11-py2.7.egg/django/core/management/base.py",
>>>>>>>>>>>>>>>>>> line 285, in execute
>>>>>>>>>>>>>>>>>>     output = self.handle(*args, **options)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/Django-1.6.11-py2.7.egg/django/core/management/base.py",
>>>>>>>>>>>>>>>>>> line 415, in handle
>>>>>>>>>>>>>>>>>>     return self.handle_noargs(**options)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/Django-1.6.11-py2.7.
>>>>>>>>>>>>>>>>>> egg/django/contrib/staticfiles/management/commands/collectstatic.py",
>>>>>>>>>>>>>>>>>> line 173, in handle_noargs
>>>>>>>>>>>>>>>>>>     collected = self.collect()
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/Django-1.6.11-py2.7.
>>>>>>>>>>>>>>>>>> egg/django/contrib/staticfiles/management/commands/collectstatic.py",
>>>>>>>>>>>>>>>>>> line 119, in collect
>>>>>>>>>>>>>>>>>>     for original_path, processed_path, processed in
>>>>>>>>>>>>>>>>>> processor:
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/django_pipeline-1.3.
>>>>>>>>>>>>>>>>>> 27-py2.7.egg/pipeline/storage.py", line 32, in
>>>>>>>>>>>>>>>>>> post_process
>>>>>>>>>>>>>>>>>>     packager.pack_stylesheets(package)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/django_pipeline-1.3.
>>>>>>>>>>>>>>>>>> 27-py2.7.egg/pipeline/packager.py", line 94, in
>>>>>>>>>>>>>>>>>> pack_stylesheets
>>>>>>>>>>>>>>>>>>     variant=package.variant, **kwargs)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/django_pipeline-1.3.
>>>>>>>>>>>>>>>>>> 27-py2.7.egg/pipeline/packager.py", line 103, in pack
>>>>>>>>>>>>>>>>>>     paths = self.compile(package.paths, force=True)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/django_pipeline-1.3.
>>>>>>>>>>>>>>>>>> 27-py2.7.egg/pipeline/packager.py", line 97, in compile
>>>>>>>>>>>>>>>>>>     return self.compiler.compile(paths, force=force)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/django_pipeline-1.3.
>>>>>>>>>>>>>>>>>> 27-py2.7.egg/pipeline/compilers/__init__.py", line 55,
>>>>>>>>>>>>>>>>>> in compile
>>>>>>>>>>>>>>>>>>     return list(executor.map(_compile, paths))
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/futures-3.0.5-py2.7.
>>>>>>>>>>>>>>>>>> egg/concurrent/futures/_base.py", line 581, in
>>>>>>>>>>>>>>>>>> result_iterator
>>>>>>>>>>>>>>>>>>     yield future.result()
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/futures-3.0.5-py2.7.
>>>>>>>>>>>>>>>>>> egg/concurrent/futures/_base.py", line 405, in result
>>>>>>>>>>>>>>>>>>     return self.__get_result()
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/futures-3.0.5-py2.7.
>>>>>>>>>>>>>>>>>> egg/concurrent/futures/thread.py", line 55, in run
>>>>>>>>>>>>>>>>>>     result = self.fn(*self.args, **self.kwargs)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/django_pipeline-1.3.
>>>>>>>>>>>>>>>>>> 27-py2.7.egg/pipeline/compilers/__init__.py", line 40,
>>>>>>>>>>>>>>>>>> in _compile
>>>>>>>>>>>>>>>>>>     outdated=outdated, force=force)
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/django_pipeline-1.3.
>>>>>>>>>>>>>>>>>> 27-py2.7.egg/pipeline/compilers/less.py", line 22, in
>>>>>>>>>>>>>>>>>> compile_file
>>>>>>>>>>>>>>>>>>     return self.execute_command(command,
>>>>>>>>>>>>>>>>>> cwd=dirname(infile))
>>>>>>>>>>>>>>>>>>   File "/usr/local/lib/python2.7/dist
>>>>>>>>>>>>>>>>>> -packages/django_pipeline-1.3.
>>>>>>>>>>>>>>>>>> 27-py2.7.egg/pipeline/compilers/__init__.py", line 99,
>>>>>>>>>>>>>>>>>> in execute_command
>>>>>>>>>>>>>>>>>>     raise CompilerError(stderr)
>>>>>>>>>>>>>>>>>> pipeline.exceptions.CompilerError: /bin/sh: 1:
>>>>>>>>>>>>>>>>>> /usr/local/lib/python2.7/dist-
>>>>>>>>>>>>>>>>>> packages/ReviewBoard-2.5.12-py
>>>>>>>>>>>>>>>>>> 2.7.egg/reviewboard/../node_modules/less/bin/lessc: not
>>>>>>>>>>>>>>>>>> found
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> The path it tries to find lessc seems wrong as well. the
>>>>>>>>>>>>>>>>>> lessc should be in /usr/local/bin/lessc.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Has anyone run into the same issue?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> Supercharge your Review Board with Power Pack:
>>>>>>>>>>>>>>>>> https://www.reviewboard.org/powerpack/
>>>>>>>>>>>>>>>>> Want us to host Review Board for you? Check out RBCommons:
>>>>>>>>>>>>>>>>> https://rbcommons.com/
>>>>>>>>>>>>>>>>> Happy user? Let us know! https://www.reviewboard.org/us
>>>>>>>>>>>>>>>>> ers/
>>>>>>>>>>>>>>>>> ---
>>>>>>>>>>>>>>>>> You received this message because you are subscribed to
>>>>>>>>>>>>>>>>> the Google Groups "reviewboard" group.
>>>>>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails
>>>>>>>>>>>>>>>>> from it, send an email to [email protected].
>>>>>>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout
>>>>>>>>>>>>>>>>> .
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>> Christian Hammond
>>>>>>>>>>>>>>>> President/CEO of Beanbag <https://www.beanbaginc.com/>
>>>>>>>>>>>>>>>> Makers of Review Board <https://www.reviewboard.org/>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> Supercharge your Review Board with Power Pack:
>>>>>>>>>>>>>> https://www.reviewboard.org/powerpack/
>>>>>>>>>>>>>> Want us to host Review Board for you? Check out RBCommons:
>>>>>>>>>>>>>> https://rbcommons.com/
>>>>>>>>>>>>>> Happy user? Let us know! https://www.reviewboard.org/users/
>>>>>>>>>>>>>> ---
>>>>>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>>>>>> Google Groups "reviewboard" group.
>>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from
>>>>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Christian Hammond
>>>>>>>>>>>>> President/CEO of Beanbag <https://www.beanbaginc.com/>
>>>>>>>>>>>>> Makers of Review Board <https://www.reviewboard.org/>
>>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Supercharge your Review Board with Power Pack:
>>>>>>>>>>>> https://www.reviewboard.org/powerpack/
>>>>>>>>>>>> Want us to host Review Board for you? Check out RBCommons:
>>>>>>>>>>>> https://rbcommons.com/
>>>>>>>>>>>> Happy user? Let us know! https://www.reviewboard.org/users/
>>>>>>>>>>>> ---
>>>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>>>> Google Groups "reviewboard" group.
>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from
>>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Christian Hammond
>>>>>>>>>>> President/CEO of Beanbag <https://www.beanbaginc.com/>
>>>>>>>>>>> Makers of Review Board <https://www.reviewboard.org/>
>>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Supercharge your Review Board with Power Pack:
>>>>>>>>>> https://www.reviewboard.org/powerpack/
>>>>>>>>>> Want us to host Review Board for you? Check out RBCommons:
>>>>>>>>>> https://rbcommons.com/
>>>>>>>>>> Happy user? Let us know! https://www.reviewboard.org/users/
>>>>>>>>>> ---
>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>> Google Groups "reviewboard" group.
>>>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>>>> send an email to [email protected].
>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Christian Hammond
>>>>>>>>> President/CEO of Beanbag <https://www.beanbaginc.com/>
>>>>>>>>> Makers of Review Board <https://www.reviewboard.org/>
>>>>>>>>>
>>>>>>>> --
>>>>>>> Supercharge your Review Board with Power Pack:
>>>>>>> https://www.reviewboard.org/powerpack/
>>>>>>> Want us to host Review Board for you? Check out RBCommons:
>>>>>>> https://rbcommons.com/
>>>>>>> Happy user? Let us know! https://www.reviewboard.org/users/
>>>>>>> ---
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "reviewboard" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to [email protected].
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Christian Hammond
>>>>>> President/CEO of Beanbag <https://www.beanbaginc.com/>
>>>>>> Makers of Review Board <https://www.reviewboard.org/>
>>>>>>
>>>>> --
>>>> Supercharge your Review Board with Power Pack:
>>>> https://www.reviewboard.org/powerpack/
>>>> Want us to host Review Board for you? Check out RBCommons:
>>>> https://rbcommons.com/
>>>> Happy user? Let us know! https://www.reviewboard.org/users/
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "reviewboard" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>> --
>>> Christian Hammond
>>> President/CEO of Beanbag <https://www.beanbaginc.com/>
>>> Makers of Review Board <https://www.reviewboard.org/>
>>>
>>
>>
>>
>> --
>> Christian Hammond
>> President/CEO of Beanbag <https://www.beanbaginc.com/>
>> Makers of Review Board <https://www.reviewboard.org/>
>>
> --
> Supercharge your Review Board with Power Pack:
> https://www.reviewboard.org/powerpack/
> Want us to host Review Board for you? Check out RBCommons:
> https://rbcommons.com/
> Happy user? Let us know! https://www.reviewboard.org/users/
> ---
> You received this message because you are subscribed to the Google Groups
> "reviewboard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Christian Hammond
President/CEO of Beanbag <https://www.beanbaginc.com/>
Makers of Review Board <https://www.reviewboard.org/>

-- 
Supercharge your Review Board with Power Pack: 
https://www.reviewboard.org/powerpack/
Want us to host Review Board for you? Check out RBCommons: 
https://rbcommons.com/
Happy user? Let us know! https://www.reviewboard.org/users/
--- 
You received this message because you are subscribed to the Google Groups 
"reviewboard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to