Client: Activity: Tests: Created BrowsePublicChannelsModalContainer component

error: pathspec 'client/activity/lib/components/browsepublicchannelsmodal/container.coffee' did not match any file(s) known to git

--- client/activity/lib/components/browsepublicchannelsmodal/container.coffee
+++ client/activity/lib/components/browsepublicchannelsmodal/container.coffee
@@ -0,0 +1,107 @@
+kd              = require 'kd'
+React           = require 'kd-react'
+View            = require './view'
+ActivityFlux    = require 'activity/flux'
+isPublicChannel = require 'app/util/isPublicChannel'
+KDReactorMixin  = require 'app/flux/base/reactormixin'
+Tabs            = require 'activity/constants/sidebarpublicchannelstabs'
+
+module.exports = class BrowsePublicChannelsModalContainer extends React.Component
+
+  @defaultProps =
+    isOpen: yes
+
+  skipCloseHandling: no
+
+  getDataBindings: ->
+
+    { getters } = ActivityFlux
+    return {
+      query          : getters.sidebarPublicChannelsQuery
+      tab            : getters.sidebarPublicChannelsTab
+      channels       : getters.sidebarPublicChannels
+      selectedThread : getters.selectedChannelThread
+    }
+
+
+  isSearchActive: -> if @state.query then yes else no
+
+
+  # if user clicks on channel in the list, modal will be closed
+  # and user will be redirected to channel's page.
+  # In this case we don't need to handle onClose event
+  onItemClick: -> @skipCloseHandling = yes
+
+
+  onClose: ->
+
+    return  @skipCloseHandling = no  if @skipCloseHandling
+    return  unless @state.selectedThread
+
+    channel = @state.selectedThread.get('channel').toJS()
+
+    route = if isPublicChannel channel
+    then "/Channels/#{channel.name}"
+    else "/Messages/#{channel.id}"
+
+    kd.singletons.router.handleRoute route
+
+
+  onYourChannelsClick: ->
+
+    { channel } = ActivityFlux.actions
+    channel.loadFollowedPublicChannels()
+    channel.setSidebarPublicChannelsTab Tabs.YourChannels
+
+
+  onOtherChannelsClick: ->
+
+    { channel } = ActivityFlux.actions
+    channel.loadChannels()
+    channel.setSidebarPublicChannelsTab Tabs.OtherChannels
+
+
+  onThresholdReached: (options) ->
+
+    { tab, query } = @state
+    { channel }    = ActivityFlux.actions
+    if @isSearchActive()
+      channel.loadChannelsByQuery query, options
+    else if tab is Tabs.YourChannels
+      channel.loadFollowedPublicChannels options
+    else
+      channel.loadChannels options
+
+
+  onSearchInputChange: (event) ->
+
+    { value }   = event.target
+    { channel } = ActivityFlux.actions
+    channel.loadChannelsByQuery value  if value
+    channel.setSidebarPublicChannelsQuery value
+
+
+  onTabChange: (type) ->
+
+    switch type
+      when Tabs.YourChannels then @onYourChannelsClick()
+      when Tabs.OtherChannels then @onOtherChannelsClick()
+
+
+  render: ->
+
+    <View
+      isOpen={@props.isOpen}
+      query={@state.query}
+      onClose={@bound 'onClose'}
+      activeTab={@state.tab}
+      channels={@state.channels}
+      isSearchActive={@isSearchActive()}
+      onItemClick={@bound 'onItemClick'}
+      onTabChange={@bound 'onTabChange'}
+      onThresholdReached={@bound 'onThresholdReached'}
+      onSearchInputChange={@bound 'onSearchInputChange'} />
+
+
+BrowsePublicChannelsModalContainer.include [KDReactorMixin]
+


Updated after comments.

Updated after comments.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/andrewjcasal/koding.git/'


Display row count in bulk insert error message.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/StreamMachine/StreamMachine.git/'


reverted get back

reverted get back

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/domjtalbot/Portfolio.git/'


Add adapter for AdminJournalUser

Add adapter for AdminJournalUser

error: pathspec 'app/assets/javascripts/adapters/admin_journal_user_adapter.js.coffee' did not match any file(s) known to git

--- app/assets/javascripts/adapters/admin_journal_user_adapter.js.coffee
+++ app/assets/javascripts/adapters/admin_journal_user_adapter.js.coffee
@@ -0,0 +1,5 @@
+ETahi.AdminJournalUserAdapter = DS.ActiveModelAdapter.extend
+  headers:
+    'Tahi-Authorization-Check': true
+  pathForType: (type) ->
+    'admin/journal_users'


Let watch.coffee handle optimizer enabling/filtering

--- src/fs_utils/generate.coffee
+++ src/fs_utils/generate.coffee
@@ -74,9 +74,7 @@
   {data, code, map, path} = params
   debug "Optimizing '#{path}' with '#{optimizer.constructor.name}'"

-  optimizeFn = optimizer.optimize or optimizer.minify
-
-  optimizerArgs = if optimizeFn.length is 2
+  optimizerArgs = if optimizer.optimize.length is 2
     # New API: optimize({data, path, map}, callback)
     [params]
   else
@@ -103,11 +101,10 @@
       newMap = map
     next error, {data: optimizedCode, code: optimizedCode, map: newMap, path}

-  optimizeFn.apply optimizer, optimizerArgs
+  optimizer.optimize.apply optimizer, optimizerArgs

-optimize = (data, map, path, optimizers, isEnabled, callback) ->
+optimize = (data, map, path, optimizers, callback) ->
   initial = {data, code: data, map, path}
-  return callback null, initial unless isEnabled
   first = (next) -> next null, initial
   waterfall [first].concat(optimizers.map mapOptimizerChain), callback

@@ -125,7 +122,7 @@
   withMaps = (map and config.sourceMaps)
   mapPath = "#{path}.map"

-  optimize code, map, path, optimizers, config.optimize, (error, data) ->
+  optimize code, map, path, optimizers, (error, data) ->
     return callback error if error?

     if withMaps


Move getDependencies debug message to a better spot

--- src/fs_utils/pipeline.coffee
+++ src/fs_utils/pipeline.coffee
@@ -26,6 +26,7 @@
 # Extract files that depend on current file.
 getDependencies = (data, path, compiler, callback) ->
   if compiler.getDependencies
+    debug "getDependencies '#{path}' with '#{compiler.constructor.name}'"
     compiler.getDependencies data, path, callback
   else
     callback null, []
@@ -33,11 +34,10 @@
 compile = (initialData, path, compilers, callback) ->
   ext = sysPath.extname(path).slice(1)
   compile.chain[ext] ?= compilers.map (compiler) =>
-    compilerName = compiler.constructor.name
     (params, next) =>
       return next() unless params
       {dependencies, compiled, source, sourceMap, path} = params
-      debug "Compiling '#{path}' with '#{compilerName}'"
+      debug "Compiling '#{path}' with '#{compiler.constructor.name}'"

       compilerData = compiled or source
       compilerArgs = if compiler.compile.length is 2
@@ -57,7 +57,6 @@
           compiled = result
         unless compiled?
           throw new Error "Brunch SourceFile: file #{path} data is invalid"
-        debug "getDependencies '#{path}' with '#{compilerName}'"
         getDependencies source, path, compiler, (error, dependencies) =>
           return callback throwError 'Dependency parsing', error if error?
           next null, {dependencies, compiled, source, sourceMap, path}


feat(accounts): filter cities options upon state selection

error: pathspec 'brasilcomvc/accounts/static/coffee/accounts-edit_user_address.coffee' did not match any file(s) known to git

--- brasilcomvc/accounts/static/coffee/accounts-edit_user_address.coffee
+++ brasilcomvc/accounts/static/coffee/accounts-edit_user_address.coffee
@@ -0,0 +1,27 @@
+if (!$('body.accounts.edit_user_address').length)
+	return
+
+
+###
+Filter cities by state selection
+###
+
+cities_select = $ '#useraddressform_city select'
+
+# Group options by state
+states = {}
+for city_el in $ 'option', cities_select
+	(states[state_label = city_el.parentNode.label] or= []).push city_el
+	current_state = state_label if city_el.selected
+
+# Clear the original <select> from <optgroup>s
+cities_select.empty()
+
+# Preset the already selected state, if any
+if current_state
+	cities_select.append states[current_state]
+
+# Build cities options upon state selection
+$('#useraddressform_state select').on 'change', ->
+	cities_select.empty()
+	cities_select.append states[@options[@selectedIndex].label]


add module for testing argument patterns

error: pathspec 'src/tests/interim-mkts-table-patterns.coffee' did not match any file(s) known to git


removed breload android support hack

removed breload android support hack

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/AppGyver/supersonic.git/'


Added a base view

Added a base view

error: pathspec 'app/scripts/views/base.coffee' did not match any file(s) known to git

--- app/scripts/views/base.coffee
+++ app/scripts/views/base.coffee
@@ -0,0 +1,23 @@
+define [
+  "backbone"
+  "handlebars"
+], (
+  Backbone,
+  Handlebars
+) ->
+  class BaseView extends Backbone.View
+    rawTemplate: ""
+    compile: Handlebars.compile.bind(Handlebars)
+
+    constructor: ->
+      @template = @compile @rawTemplate
+      super()
+
+    in: ->
+      @$el.removeClass("out").addClass "in"
+      this
+
+    out: ->
+      @$el.removeClass("in").addClass "out"
+      this
+


Remove spurios console.logs

Remove spurios console.logs

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/MicrosmartSA/ubiquity-ui.git/'


Added specRunner.coffee

Added specRunner.coffee

error: pathspec 'specRunner.coffee' did not match any file(s) known to git

--- specRunner.coffee
+++ specRunner.coffee
@@ -0,0 +1,42 @@
+require.config({
+    paths: {
+        jquery: 'lib/jquery',
+        'jasmine': 'lib/jasmine-1.3.1/jasmine',
+        'jasmine-html': 'lib/jasmine-1.3.1/jasmine-html',
+    },
+    shim: {
+        jasmine: {
+            exports: 'jasmine'
+        },
+        'jasmine-html': {
+            deps: ['jasmine'],
+            exports: 'jasmine'
+        }
+    }
+})
+
+require(['jquery', 'jasmine-html'], ($, jasmine) ->
+
+    jasmineEnv = jasmine.getEnv()
+    jasmineEnv.updateInterval = 1500
+
+    htmlReporter = new jasmine.HtmlReporter()
+
+    jasmineEnv.addReporter(htmlReporter)
+
+    jasmineEnv.specFilter = (spec) ->
+      return htmlReporter.specFilter(spec)
+
+    specs = []
+
+    specs.push('spec/gamespec')
+    specs.push('spec/playerspec')
+
+
+    $(()->
+      require(specs, (spec) ->
+        jasmineEnv.execute()
+      )
+    )
+
+)


Config file with the package config schema

error: pathspec 'lib/config.coffee' did not match any file(s) known to git

--- lib/config.coffee
+++ lib/config.coffee
@@ -0,0 +1,45 @@
+# config schema
+module.exports =
+  format_on_save:
+    type: 'boolean'
+    default: true
+  indent_with_tabs:
+    type: 'boolean'
+    default: false
+  max_preserve_newlines:
+    type: 'integer'
+    default: 4
+  preserve_newlines:
+    type: 'boolean'
+    default: true
+  space_in_paren:
+    type: 'boolean'
+    default: false
+  jslint_happy:
+    type: 'boolean'
+    default: false
+  brace_style:
+    type: 'string'
+    default: 'collapse'
+    enum: ['collapse', 'expand', 'end-expand']
+  keep_array_indentation:
+    type: 'boolean'
+    default: false
+  keep_function_indentation:
+    type: 'boolean'
+    default: false
+  space_before_conditional:
+    type: 'boolean'
+    default: true
+  eval_code:
+    type: 'boolean'
+    default: false
+  unescape_strings:
+    type: 'boolean'
+    default: false
+  break_chained_methods:
+    type: 'boolean'
+    default: false
+  e4x:
+    type: 'boolean'
+    default: false


Implemented configuration entity

Implemented configuration entity

error: pathspec 'src/wrathnet/entities/config.coffee' did not match any file(s) known to git

--- src/wrathnet/entities/config.coffee
+++ src/wrathnet/entities/config.coffee
@@ -0,0 +1,30 @@
+#
+# WrathNet Foundation
+# Copyright (c) 2012 Tim Kurvers <http://wrathnet.org>
+#
+# World of Warcraft client foundation written in JavaScript, enabling
+# development of expansion-agnostic clients, bots and other useful tools.
+#
+# The contents of this file are subject to the MIT License, under which
+# this library is licensed. See the LICENSE file for the full license.
+#
+
+# Configuration containing platform, operating system and locale
+class WrathNet.entities.Config
+
+  @LOCALE_ENGLISH_AMERICAN = 'enUS'
+  @LOCALE_ENGLISH_BRITISH = 'enGB'
+
+  @OS_WINDOWS = 'Win '
+  @OS_MACINTOSH = 'Mac '
+
+  @PLATFORM_X86 = 'x86 '
+  @PLATFORM_PPC = 'PPC '
+
+  # Creates a new configuration
+  constructor: (locale=@constructor.LOCALE_ENGLISH_AMERICAN, os=@constructor.OS_WINDOWS, timezone=0, platform=@constructor.PLATFORM_X86) ->
+    @raw = {
+      locale:   locale.split('').reverse().join('')
+      os:       os.split('').reverse().join('')
+      platform: platform.split('').reverse().join('')
+    }


bug fix

bug fix

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bubblegroup/bubblebot.git/'


Initial code and test.

Initial code and test.

error: pathspec 'src/pongo.coffee' did not match any file(s) known to git

--- src/pongo.coffee
+++ src/pongo.coffee
@@ -0,0 +1,29 @@
+
+class Collection
+  constructor: (@storage, @db, @col) ->
+    @ns = @db + '.' + @col
+
+class Database
+  constructor: (@connection, @db) ->
+    @storage = @connection.storage
+    try
+      @collections = @storage.getItem(@db+'system.namespaces').split(',')
+    catch e # TypeError: the collection does not exist.
+      @collections = []
+
+  col: (collection) ->
+    new Collection(@storage, @db, @col)
+
+class Connection
+  constructor: (@storage) ->
+    @db_names = @storage.db_names
+
+  db: (name)->
+    new Database(@, name)
+
+Pongo = @Pongo =
+  'Connection': Connection
+  'Database': Database
+  'Collection': Collection
+
+module?.exports = Pongo


it works!

it works!

error: pathspec 'src/rfc3394.iced' did not match any file(s) known to git

--- src/rfc3394.iced
+++ src/rfc3394.iced
@@ -0,0 +1,70 @@
+
+{WordArray} = require 'triplesec'
+
+#================================================================================
+
+# RFC 3394, Section 2.2.3.1 -- Initial Value
+#  http://tools.ietf.org/html/rfc3394#section-2.2.3.1
+IV = WordArray.from_hex "A6A6A6A6A6A6A6A6"
+
+#================================================================================
+
+# Split a WordArray into an array of smaller 64-bit buffers
+split64 = (wa) -> wa.split (wa.words.length >> 1)
+
+#================================================================================
+
+#
+# RFC 3394, Section 2.2.1 --- Key Wrap
+#    http://tools.ietf.org/html/rfc3394#section-2.2.1
+#
+# @param {Buffer} plaintext The plaintext to encrypt
+# @param {Buffer} key the Key to encrypt with
+# @param {Object} cipher The cipher object, which contains a `klass` saying which
+#   class to use, and also a `key_size`; As returned from `symmetric.get_cipher`
+# @return {Buffer} the ciphertext, all wrapped
+#
+exports.wrap = wrap = ({plaintext, key, cipher}) ->
+
+  P = split64 WordArray.from_buffer plaintext
+  K = WordArray.from_buffer key
+  {klass} = cipher
+  AES = new klass K
+
+  # Sanity-check the key size
+  unless (a = cipher.key_size) is (b = key.length)
+    throw new Error "Bad key, needed #{a} bytes, but got #{b}"
+
+  # n is the number of 64-bit chunks the plaintext can be split into.
+  n = P.length
+
+  # 1) Initialize Variables
+  A = IV
+  R = P
+
+  # 2) Calculate intermediate values
+  t = new WordArray [0,0]
+  for j in [0...6]
+    for r,i in R
+      t.words[1]++
+      B = A.clone().concat(r)
+      AES.encryptBlock B.words
+      A = B.slice(0,2)
+      R[i] = B.slice(2,4)
+      A.xor(t, {})
+
+  # 3) Output the results
+  C = A
+  C.concat(r) for r in R
+  return C.to_buffer()
+
+#================================================================================
+
+test = () ->
+  {AES} = require('triplesec').ciphers
+  {get_cipher} = require './symmetric'
+  plaintext = new Buffer "00112233445566778899AABBCCDDEEFF", "hex"
+  key = new Buffer "000102030405060708090A0B0C0D0E0F", "hex"
+  cipher = { klass : AES , key_size : 16 }
+  console.log wrap({ plaintext, key, cipher }).toString 'hex'
+test()


CLIO-23455: Remove broken form spec from button group.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/seanhealy/lib-themisui.git/'


fixed blockquote js bug

fixed blockquote js bug

fatal: remote error: upload-pack: not our ref e2032678ba82ead91172e62637ecb7efc9ac5743
fatal: the remote end hung up unexpectedly


Added Config class for managing hostname plugins.

error: pathspec 'src/config.coffee' did not match any file(s) known to git

--- src/config.coffee
+++ src/config.coffee
@@ -0,0 +1,95 @@
+fs      = require 'fs'
+path    = require 'path'
+_       = require 'underscore'
+helpers = require './helpers'
+
+class exports.Config
+
+  constructor: ->
+    platform = if process.platform is 'win32' then 'USERPROFILE' else 'HOME'
+    @file = path.join process.env[platform], '.snail'
+    @open()
+
+  # Return contents of ~/.snail or return an empty object {}
+  open: ->
+    @config = JSON.parse try fs.readFileSync @file, 'utf-8' catch err then '{}'
+    @save()
+    @config
+
+  # Returns false on fail, or the file contents
+  save: ->
+    err = fs.writeFileSync @file, JSON.stringify(@config, null, 2)
+    if err
+      false
+    @config
+
+  # Erase & reset the config
+  reset: ->
+    @config = {}
+    @save()
+
+  addHostname: (hostname) ->
+    hostname = helpers.getHostname hostname
+
+    if @config.hasOwnProperty hostname
+      false
+    else
+      @config[hostname] = []
+
+  getHostname: (hostname) ->
+    hostname = helpers.getHostname hostname
+
+    if not @config.hasOwnProperty hostname
+      false
+    else
+      @config[hostname]
+
+  deleteHostname: (hostname) ->
+    hostname = helpers.getHostname hostname
+
+    delete @config[hostname]
+
+  addPlugin: (hostname, plugin_name, opts) ->
+    hostname = helpers.getHostname hostname
+
+    if not @getHostname hostname
+      false
+    else
+      @config[hostname].push
+        name: plugin_name
+        opts: opts
+
+      @config[hostname]
+
+  getPlugin: (hostname, plugin_name) ->
+    hostname = helpers.getHostname hostname
+
+    if not @getHostname hostname or not plugin_name
+      false
+    else
+      plugins = @getHostname hostname
+      plugin = false
+      _.each plugins, (p) ->
+        if p.name is plugin_name
+          plugin = p
+
+      if not _.isObject plugin
+        false
+      else
+        plugin
+
+  updatePlugin: (hostname, plugin_name, opts) ->
+    console.log 'updatePlugin'
+    hostname = helpers.getHostname hostname
+
+    if not @getHostname hostname or not plugin_name
+      false
+    else
+      if not @getPlugin hostname, plugin_name
+        false
+      else
+        #@deletePlugin hostname, plugin_name
+        #@addPlugin hostname, plugin_name, opts
+        _.each opts, (val, key) ->
+          @config[hostname][plugin]['opts'][key] = val
+


fix refactor typo

fix refactor typo

--- lib/listeners/data_action_listener.coffee
+++ lib/listeners/data_action_listener.coffee
@@ -82,7 +82,7 @@
         @reply res, {looker: {success: false, message: "Channel must be a string."}}
         return

-      context = new ReplyContext(bot, bot, {
+      context = new ReplyContext(@bot, @bot, {
         channel: channel
       })
       context.dataAction = true


Add a new custom script for Arnie quotes

error: pathspec 'scripts/arnie-quotes.coffee' did not match any file(s) known to git

--- scripts/arnie-quotes.coffee
+++ scripts/arnie-quotes.coffee
@@ -0,0 +1,39 @@
+# Description:
+#   Listens for words and sometimes replies with an Arnie quote
+#
+# Dependencies:
+#   None
+#
+# Commands:
+#   None
+#
+# Author:
+#   Casey Lawrence <cjlaw@users.noreply.github.com>
+#
+
+odds  = [1...100]
+
+arnie_quotes = [
+    'GET TO THE CHOPPA!',
+    'Your clothes, give them to me, now!',
+    'Hasta La Vista, Baby!',
+    'DDDAAANNNAAAA!',
+    'You are one ugly mother******.',
+    'It`s not a tumor!',
+    'When I said you should screw yourself. I didn`t mean it literally.',
+    'Can you hurry up. My horse is getting tired.',
+    'Are these all your lunches? You mean you eat other peoples` lunches? STOP IT!!',
+    'I`m the party pooper.',
+    'Who is your daddy and what does he do?'
+]
+
+module.exports = (robot) ->
+    robot.hear /(^|\s)arnie(\s|$|[\W])/ig, (msg) ->
+        val = msg.random odds
+        if val > 50
+            msg.send msg.random arnie_quotes
+
+    robot.hear /(^|\s)arnold(\s|$|[\W])/ig, (msg) ->
+        val = msg.random odds
+        if val > 50
+            msg.send msg.random arnie_quotes


Update gulpfile template

Update gulpfile template

Signed-off-by: Mark Griffiths <f1b5a91d4d6ad523f2610114591c007e75d15084@thebespokepixel.com>

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/MarkGriffiths/cordial.git/'


reconnect to mongodb

reconnect to mongodb

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bekite/knignish.git/'


bug fix

bug fix


possible fix for #408

possible fix for #408

--- lib/runtime/evaluation.coffee
+++ lib/runtime/evaluation.coffee
@@ -121,7 +121,7 @@

   cdHere: ->
     file = atom.workspace.getActiveTextEditor()?.getPath()
-    file? or atom.notifications.addError 'This file has no path.'
+    if !file then atom.notifications.addError 'This file has no path.'
     cd path.dirname(file)

   cdProject: ->


StartupContextのテストケース書き始め

StartupContextのテストケース書き始め

error: pathspec 'test/contexts/startup.coffee' did not match any file(s) known to git

--- test/contexts/startup.coffee
+++ test/contexts/startup.coffee
@@ -0,0 +1,17 @@
+# --------------------------------------
+# ルール系モデルのテストケース
+# --------------------------------------
+require '../../src/globals'
+assert         = require("assert")
+StartupContext = require('../../src/contexts/startup').StartupContext
+
+
+describe 'MaruBatsuRule test', () ->
+  describe 'default state', () ->
+    context = new StartupContext(null, {})
+    it 'test right', () ->
+      state_ = context.initState(context.props)
+      assert.equal 12, state_.maxPlayers
+      assert.equal 12, state_.playerNames.length
+      assert.equal '', state_.playerNames[0]
+      assert.equal '', state_.playerNames[11]


Added i=0 at beginning

Added i=0 at beginning

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/thestartcup/jsonc.git/'


Corrected bug with float signs

Corrected bug with float signs


reset time OSD when loading new video

reset time OSD when loading new video

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Boxee/cloudee-couch.git/'


Set correct separator for cookie parsing.

--- src/websocket/transports/socketio/index.coffee
+++ src/websocket/transports/socketio/index.coffee
@@ -73,7 +73,7 @@
   # Parse session ID from initial hankshake data
   try
     rawCookie = socket.handshake.headers.cookie
-    cookie = qs.parse(rawCookie)
+    cookie = qs.parse(rawCookie, ';')
     sessionId = cookie['connect.sid'].split('.')[0]
     socket.sessionId = sessionId
   catch e


Test to validate expansion list.

Test to validate expansion list.

error: pathspec 'tests/test_expansions.coffee' did not match any file(s) known to git

--- tests/test_expansions.coffee
+++ tests/test_expansions.coffee
@@ -0,0 +1,40 @@
+common = require './common'
+
+common.setup()
+
+casper.test.begin "Validate Expansions", (test) ->
+    valid_expansions = [
+        "A-Wing Expansion Pack"
+        "B-Wing Expansion Pack"
+        "Core"
+        "E-Wing Expansion Pack"
+        "HWK-290 Expansion Pack"
+        "Imperial Aces Expansion Pack"
+        "Lambda-Class Shuttle Expansion Pack"
+        "Millennium Falcon Expansion Pack"
+        "Rebel Aces Expansion Pack"
+        "Rebel Transport Expansion Pack"
+        "Slave I Expansion Pack"
+        "TIE Advanced Expansion Pack"
+        "TIE Bomber Expansion Pack"
+        "TIE Defender Expansion Pack"
+        "TIE Fighter Expansion Pack"
+        "TIE Interceptor Expansion Pack"
+        "TIE Phantom Expansion Pack"
+        "Tantive IV Expansion Pack"
+        "VT-49 Decimator Expansion Pack"
+        "X-Wing Expansion Pack"
+        "Y-Wing Expansion Pack"
+        "YT-2400 Freighter Expansion Pack"
+        "Z-95 Headhunter Expansion Pack"
+    ]
+
+    common.waitForStartup('#rebel-builder')
+    .then ->
+        expansions = @evaluate ->
+            expansions
+        for expansion in expansions
+            test.assert expansion in valid_expansions, "#{expansion} is valid"
+
+    .run ->
+        test.done()


Added query string parsing to the startup calls

Upon startup, Simrou does not parse the query string for data. Now it does.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/legacybass/Simrou.git/'


away time increase

away time increase

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/deep0892/jitendrachatbot.git/'


Update configuration

Update configuration

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ehmicky/myos.git/'


Allow custom notify sound by options

Allow custom notify sound by options

--- views/env.coffee
+++ views/env.coffee
@@ -107,6 +107,7 @@
   if options?
     title = options.title if options.title
     icon = options.icon if options.icon
+    audio = options.audio if options.audio
   # Send desktop notification
   return unless enabled
   if NOTIFY_NOTIFICATION_API


Show files with unsaved changes and confirm removing the same

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/nathan/lemma.git/'


Less frequent time reporter

Less frequent time reporter

--- app/assets/javascripts/player/movie.js.coffee
+++ app/assets/javascripts/player/movie.js.coffee
@@ -133,7 +133,7 @@
   startTimeReporter: ->
     @timeReportId = setInterval(
       => @trigger('time', @currentTime())
-      100
+      500
     )

   stopTimeReporter: ->


fixed settings button toggling

fixed settings button toggling

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/leonidas/qa-dashboard.git/'


Update world.coffee

Update world.coffee

add getGoalState

--- app/lib/world/world.coffee
+++ app/lib/world/world.coffee
@@ -241,6 +241,9 @@
       @scriptNotes.push scriptNote
     return unless @goalManager
     @goalManager.submitWorldGenerationEvent(channel, event, @frames.length)
+
+  getGoalState: (goalID) ->
+    @goalManager.getGoalState(goalID)

   setGoalState: (goalID, status) ->
     @goalManager.setGoalState(goalID, status)


Add simple github api client

Add simple github api client

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tombell/hubot-github-identity.git/'


[model] BaseModel

[model] BaseModel

error: pathspec 'app/scripts/models/base.coffee' did not match any file(s) known to git

--- app/scripts/models/base.coffee
+++ app/scripts/models/base.coffee
@@ -0,0 +1,16 @@
+define [
+  'backbone'
+], (Backbone) ->
+
+  class BaseModel extends Backbone.Model
+
+    serverAttrs: []
+
+    toServerJSON: ->
+      json = _.clone @toJSON()
+      if _.any @serverAttrs
+        json = _.pick json, @serverAttrs
+
+    parse: (response, options) ->
+      parsed =
+        response: response


Inject the current path into Sharify

Inject the current path into Sharify

--- lib/setup.coffee
+++ lib/setup.coffee
@@ -60,6 +60,11 @@
     SECURE_IMAGES_URL: SECURE_IMAGES_URL
     IMAGES_URL_PREFIX: IMAGES_URL_PREFIX

+  # Inject the current path into Sharify
+  app.use (req, res, next) ->
+    res.locals.sd.CURRENT_PATH = req.url
+    next()
+
   # Setup Artsy Passport
   app.use express.cookieParser(SESSION_SECRET)
   app.use express.cookieSession()


add device permission to home

add device permission to home

--- lib/token.coffee
+++ lib/token.coffee
@@ -113,6 +113,7 @@
         "application": "authorized"
         "notification": "authorized"
         "user": "authorized"
+        "device": "authorized"
         "alarm": "authorized"
         "cozyinstance": "authorized"
         "encryptedkeys": "authorized"


need sockets.coffee

need sockets.coffee

error: pathspec 'browser/coffee/sockets.coffee' did not match any file(s) known to git

--- browser/coffee/sockets.coffee
+++ browser/coffee/sockets.coffee
@@ -0,0 +1,8 @@
+
+PREFIX = 'ws://localhost:8886/'
+
+changes = new WebSocket PREFIX + 'changes'
+
+# incoming = new WebSocket PREFIX + 'config'
+# incoming.onmessage = (config) ->
+#     console.log config


devicemotion fix

devicemotion fix

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/oliverhruby/noflo-sensors.git/'


Add test stubs.

Add test stubs.

error: pathspec 'test/index.coffee' did not match any file(s) known to git

--- test/index.coffee
+++ test/index.coffee
@@ -0,0 +1,17 @@
+describe 'internals', ->
+    it 'can load one or more context files'
+    it 'can namespace context using name:path identifiers'
+    it 'can namespace context using the basename'
+    it 'can namespace context using the full path'
+    it 'can merge context objects'
+    it 'can append context arrays'
+    it 'will throw an error when trying to merge objects and arrays'
+    it 'will throw an error when it cannot figure out the template engine'
+    it 'can render a layout'
+
+describe 'command-line interface', ->
+    it 'can render a layout'
+    it 'can render a layout with context'
+    it 'can dynamically decide which layout to render based on the context'
+    it 'can render to many HTML files at once'
+    it 'can rerender only when needed'


Frames; more tidy up; fix typo.

Frames; more tidy up; fix typo.

--- background_scripts/main.coffee
+++ background_scripts/main.coffee
@@ -610,7 +610,7 @@
   else
     removingCurrent = frameIdsForTab[tabId].length and frameIdsForTab[tabId][0] == request.frameId
     frameIdsForTab[tabId] = frameIdsForTab[tabId].filter (id) -> id != request.frameId
-    BackGroundCommands.nextFrame 0 if removingCurrent
+    BackgroundCommands.nextFrame 0 if removingCurrent

 handleFrameFocused = (request, sender) ->
   tabId = sender.tab.id


JStackTemplate.Test: better title compare for template create tests

--- workers/social/lib/social/models/computeproviders/stacktemplate.test.coffee
+++ workers/social/lib/social/models/computeproviders/stacktemplate.test.coffee
@@ -70,7 +70,7 @@
           JStackTemplate.create client, stackTemplateData, (err, template) ->
             expect(err?.message)                  .not.exist
             expect(template.title)                .to.exist
-            expect(template.title.split(' ')[1])  .to.be.equal 'Aws'
+            expect(template.title.split(' ')[..-2][0]).to.be.equal 'Aws'
             expect(template.slug)                 .to.be.equal slugify template.title
             done()


Script to find failed calls to `/dev/log`.

error: pathspec 'bin/unauthorized_logging.coffee' did not match any file(s) known to git

--- bin/unauthorized_logging.coffee
+++ bin/unauthorized_logging.coffee
@@ -0,0 +1,33 @@
+#!/usr/bin/env coffee
+
+fs = require "fs"
+
+# There has got to be a better way to read these logs, to read them actually
+# line by line.
+back = []
+for line in fs.readFileSync("/var/log/audit/audit.log", "utf8").split /\n/
+  # Keep three lines, because three lines together represent a single socketcall
+  # event.
+  back.shift() if back.length is 3
+  back.push line
+
+  # We're looking to see if anyone is attempting # to read /dev/log, so we're
+  # looking for UNIX socket events.
+  #
+  # The saddr field is a hex dump of a structure, 220 characters long, 110 bytes
+  # long, consisting of a short type identifier, little-endian, and 108
+  # character path to the socket. The hex pattern for the local socket type is
+  # `0100`, since AF_LOCAL is 1 and the short value is little-endian. We match
+  # the hex pattern for AF_LOCAL, capture the string. Stuff after the
+  # terminating `00` is garbage.
+  if match = /^type=SOCKADDR\s+msg=audit\(([\d.]+):(\d+)\):\s+saddr=([0-9A-F]+)/.exec(line)
+    if path = /^0100(.*?)00/.exec(match[3])
+      path = path[1]
+      length = path.length / 2
+      buffer = new Buffer(length)
+      for i in [0...length]
+        offset = i * 2
+        buffer[i] = parseInt path.substring(offset, offset + 2), 16
+      converted = buffer.toString("utf8", 0, buffer.length)
+      if converted is "/dev/log"
+        process.stdout.write "#{back.join "\n"}\n"


Extend new modal from ComputePlansModalFree

error: pathspec 'client/ide/lib/views/collaboration/limitedvideocollaborationfree.coffee' did not match any file(s) known to git

--- client/ide/lib/views/collaboration/limitedvideocollaborationfree.coffee
+++ client/ide/lib/views/collaboration/limitedvideocollaborationfree.coffee
@@ -0,0 +1,19 @@
+kd                    = require 'kd'
+KDView                = kd.View
+CustomLinkView        = require 'app/customlinkview'
+ComputePlansModalFree = require 'app/providers/computeplansmodalfree'
+
+
+module.exports = class LimitedVideoCollaborationFree extends ComputePlansModalFree
+
+
+  viewAppended: ->
+
+    @addSubView new KDView
+      cssClass : 'message',
+      partial  : """
+        Free accounts are restricted to only one guest for video collaboration.
+      """
+
+    @addPricingLink 'Upgrade your account to any paid plan for unlimited video collaboration.'
+


Disabled the new and old date on recording calendar. (#2210)

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/evercam/evercam-dashboard.git/'


fix fdf9f65a519e90e1856a33d1b960de980f75cd55

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/netguru/people.git/'


Terminal: user notification is added when the users sessions cannot be restored

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/andrewjcasal/koding.git/'


:bug:Fix admin classroom progress export paging

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/VilkkuV/codecombat.git/'


IDE: AppController: resurrect terminal sessions from activeSessions

--- client/ide/AppController.coffee
+++ client/ide/AppController.coffee
@@ -285,7 +285,7 @@
           @finderPane.addSubView @fakeFinderView, '.nfinder .jtreeview-wrapper'

         else
-          @createNewTerminal { machine }
+          @createNewTerminal { machine, resurrectSessions: yes }
           @setActiveTabView @ideViews.first.tabView
           @forEachSubViewInIDEViews_ (pane) ->
             pane.isInitial = yes
@@ -441,7 +441,7 @@

   createNewTerminal: (options) ->

-    { machine, path } = options
+    { machine, path, resurrectSessions } = options

     unless machine instanceof Machine
       machine = @mountedMachine
@@ -459,6 +459,16 @@
     # `path` is always the one we send explicitly here - SY
     path = null  unless typeof path is 'string'

+    if resurrectSessions and @workspaceData?.isDefault
+
+      sessions = machine.getBaseKite().getActiveSessions()
+
+      if sessions.length > 0
+        sessions.forEach (session)=>
+          options.session = session
+          @activeTabView.emit 'TerminalPaneRequested', options
+        return
+
     @activeTabView.emit 'TerminalPaneRequested', options

@@ -547,6 +557,9 @@
       ideViewLength  = 0
       ideViewLength += ideView.tabView.panes.length  for ideView in @ideViews
       delete @generatedPanes[pane.view.hash]
+
+      if session = pane.view.remote?.session
+        @mountedMachine.getBaseKite().removeFromActiveSessions session

       @statusBar.showInformation()  if ideViewLength is 0

@@ -790,7 +803,7 @@
     unless @fakeViewsDestroyed
       @fakeFinderView?.destroy()
       @fakeTabView?.removePane_ @fakeTerminalPane
-      @createNewTerminal { machine }
+      @createNewTerminal { machine, resurrectSessions: yes }
       @setActiveTabView @ideViews.first.tabView
       @fakeViewsDestroyed = yes


Log time taken to upload

Log time taken to upload

--- build/tasks/publish-build-task.coffee
+++ build/tasks/publish-build-task.coffee
@@ -31,7 +31,13 @@
     cp path.join(docsOutputDir, 'api.json'), path.join(buildDir, 'atom-api.json')

   grunt.registerTask 'upload-assets', 'Upload the assets to a GitHub release', ->
-    done = @async()
+    doneCallback = @async()
+    startTime = Date.now()
+    done = (args...) ->
+      elapsedTime = Math.round((Date.now() - startTime) / 100) / 10
+      grunt.log.ok("Upload time: #{elapsedTime}s")
+      doneCallback(args...)
+
     buildDir = grunt.config.get('atom.buildDir')
     assets = getAssets()


fix tilde after fixing navbar usage

fix tilde after fixing navbar usage

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/stevelacy/claru.git/'


Change message

Change message

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/nunulk/robo-blanca.git/'


rename onChange to onInput.

rename onChange to onInput.

React textarea onChange is actually onInput, so it should be called that
instead.

--- resources/assets/coffee/react/beatmapset-page/description-editor.coffee
+++ resources/assets/coffee/react/beatmapset-page/description-editor.coffee
@@ -34,7 +34,7 @@
   componentWillUnmount: =>
     # stuff

-  onChange: (e) =>
+  onInput: (_e) =>
     @setState rawValue: @refs.body.value

@@ -60,7 +60,7 @@
         className: 'post-editor'
         name: 'body'
         value: @state.rawValue
-        onChange: @onChange # binds to oninput, not onchange
+        onChange: @onInput # binds to oninput, not onchange
         placeholder: 'blah'
         ref: 'body'

@@ -70,7 +70,7 @@
           div className: 'post-box-toolbar',
             button
               className: 'btn-circle btn-circle--bbcode js-bbcode-btn--bold'
-              onClick: @onChange
+              onClick: @onInput
               title: osu.trans('bbcode.bold')
               type: 'button',

@@ -79,7 +79,7 @@

             button
               className: 'btn-circle btn-circle--bbcode js-bbcode-btn--italic'
-              onClick: @onChange
+              onClick: @onInput
               title: osu.trans('bbcode.italic')
               type: 'button',

@@ -88,7 +88,7 @@

             button
               className: 'btn-circle btn-circle--bbcode js-bbcode-btn--strikethrough'
-              onClick: @onChange
+              onClick: @onInput
               title: osu.trans('bbcode.strikethrough')
               type: 'button',

@@ -97,7 +97,7 @@

             button
               className: 'btn-circle btn-circle--bbcode js-bbcode-btn--heading'
-              onClick: @onChange
+              onClick: @onInput
               title: osu.trans('bbcode.heading')
               type: 'button',

@@ -106,7 +106,7 @@

             button
               className: 'btn-circle btn-circle--bbcode js-bbcode-btn--link'
-              onClick: @onChange
+              onClick: @onInput
               title: osu.trans('bbcode.link')
               type: 'button',

@@ -115,7 +115,7 @@

             button
               className: 'btn-circle btn-circle--bbcode js-bbcode-btn--spoilerbox'
-              onClick: @onChange
+              onClick: @onInput
               title: osu.trans('bbcode.spoilerbox')
               type: 'button',

@@ -123,7 +123,7 @@

             button
               className: 'btn-circle btn-circle--bbcode js-bbcode-btn--list-numbered'
-              onClick: @onChange
+              onClick: @onInput
               title: osu.trans('bbcode.list_numbered')
               type: 'button',

@@ -132,7 +132,7 @@

             button
               className: 'btn-circle btn-circle--bbcode js-bbcode-btn--list'
-              onClick: @onChange
+              onClick: @onInput
               title: osu.trans('bbcode.list')
               type: 'button',

@@ -141,7 +141,7 @@

             button
               className: 'btn-circle btn-circle--bbcode js-bbcode-btn--image'
-              onClick: @onChange
+              onClick: @onInput
               title: osu.trans('bbcode.image')
               type: 'button',

@@ -157,7 +157,7 @@
                 i className: "fa fa-chevron-down"
                 select
                   className: 'bbcode-size-select__select js-bbcode-btn--size'
-                  onChange: @onChange
+                  onChange: @onInput
                   value: '100',
                   option value: '50', osu.trans('bbcode.size.tiny')
                   option value: '85', osu.trans('bbcode.size.small')


--- renderer/lib/override.coffee
+++ renderer/lib/override.coffee
@@ -34,3 +34,10 @@
   browser = new BrowserWindow options
   browser.loadUrl url
   browser
+
+# Use the dialog API to implement alert().
+window.alert = (message, title='') ->
+  remote = require 'remote'
+  dialog = remote.require 'dialog'
+  buttons = ['OK']
+  dialog.showMessageBox remote.getCurrentWindow(), {message, title, buttons}


Switched to $.scrollTo instead of custom animation and refactored toggle method.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bmedx/modulestore.git/'


Req -> resp for consistency.

Req -> resp for consistency.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/picoCTF/picoCTF-web.git/'


Clean up test to verify that an individual failed search fails the overall search.

--- spec/workspace-spec.coffee
+++ spec/workspace-spec.coffee
@@ -985,31 +985,27 @@
               expect(onPathsSearched.mostRecentCall.args[0]).toBe(
                 numPathsToPretendToSearchInCustomDirectorySearcher + numPathsSearchedInDir2)

-          it "can be cancelled by cancelling one of the DirectorySearchers", ->
-            customDirectorySearcherPromiseInstance = null
-            class CustomDirectorySearchToCancel
+          it "will have the side-effect of failing the overall search if it fails", ->
+            # Note that hoisting reject in this way is generally frowned upon.
+            hoistedReject = null
+            class CustomDirectorySearchThatWillFail
               constructor: ->
-                # Note that hoisting reject in this way is generally frowned upon.
-                @promise = new Promise (resolve, reject) =>
-                  @hoistedReject = reject
-                customDirectorySearcherPromiseInstance = this
+                @promise = new Promise (resolve, reject) ->
+                  hoistedReject = reject
               then: (args...) ->
                 @promise.then.apply(@promise, args)
               cancel: ->
-                @hoistedReject()

             class CustomDirectorySearcherToCancel
               canSearchDirectory: (directory) -> directory.getPath() is dir1
               search: (directory, options) ->
-                new CustomDirectorySearchToCancel
+                new CustomDirectorySearchThatWillFail

             atom.packages.serviceHub.provide(
               "atom.directory-searcher", "0.1.0", new CustomDirectorySearcherToCancel())

-            resultPaths = []
-            cancelableSearch = atom.workspace.scan /aaaa/, ({filePath}) ->
-              resultPaths.push(filePath)
-            customDirectorySearcherPromiseInstance.cancel()
+            cancelableSearch = atom.workspace.scan /aaaa/, ->
+            hoistedReject()

             resultOfPromiseSearch = null
             waitsForPromise ->


Add JSONiq snippets

Add JSONiq snippets

error: pathspec 'snippets/language-jsoniq.cson' did not match any file(s) known to git

--- snippets/language-jsoniq.cson
+++ snippets/language-jsoniq.cson
@@ -0,0 +1,74 @@
+'.source.jq':
+  'for':
+    'prefix': 'for'
+    'body': 'for $${1:item} in ${2:expr}'
+  'return':
+    'prefix': 'return'
+    'body': 'return ${1:expr}'
+  'import':
+    'prefix': 'import'
+    'body': 'import module namespace ${1:ns} = "${2:http://www.example.com/}";'
+  'some':
+    'prefix': 'some'
+    'body': 'some $${1:varname} in ${2:expr} satisfies ${3:expr}'
+  'every':
+    'prefix': 'every'
+    'body': 'every $${1:varname} in ${2:expr} satisfies ${3:expr}'
+  'if':
+    'prefix': 'if'
+    'body': 'if(${1:true}) then ${2:expr} else ${3:true}'
+  'switch':
+    'prefix': 'switch'
+    'body': 'switch(${1:"foo"})\ncase ${2:"foo"}\nreturn ${3:true}\ndefault return ${4:false}'
+  'try':
+    'prefix': 'try'
+    'body': 'try { ${1:expr} } catch ${2:*} { ${3:expr} }'
+  'tumbling':
+    'prefix': 'tumbling'
+    'body': '
+    	for tumbling window $${1:varname} in ${2:expr}\nstart at $${3:start} when ${4:expr}\nend at $${5:end} when ${6:expr}\nreturn ${7:expr}'
+  'sliding':
+    'prefix': 'tumbling'
+    'body': 'for sliding window $${1:varname} in ${2:expr}\nstart at $${3:start} when ${4:expr}\nend at $${5:end} when ${6:expr}\nreturn ${7:expr}'
+  'let':
+    'prefix': 'let'
+    'body': 'let $${1:varname} := ${2:expr}'
+  'group':
+    'prefix': 'group'
+    'body': 'group by $${1:varname} := ${2:expr}'
+  'order':
+    'prefix': 'order'
+    'body': 'order by $${1:expr} := ${2:descending}'
+  'stable':
+    'prefix': 'stable'
+    'body': 'stable order by $${1:expr}'
+  'count':
+    'prefix': 'count'
+    'body': 'count $${1:varname}'
+  'ordered':
+    'prefix': 'ordered'
+    'body': 'ordered { ${1:expr} }'
+  'unordered':
+    'prefix': 'unordered'
+    'body': 'unordered { ${1:expr} }'
+  'treat':
+    'prefix': 'treat'
+    'body': 'treat as ${1:expr}'
+  'castable':
+    'prefix': 'castable'
+    'body': 'castable as ${1:atomicType}'
+  'cast':
+    'prefix': 'cast'
+    'body': 'cast as ${1:atomicType}'
+  'typeswitch':
+    'prefix': 'typeswitch'
+    'body': 'typeswitch(${1:expr})\ncase ${2:type}  return ${3:expr}\ndefault return ${4:expr}'
+  'var':
+    'prefix': 'var'
+    'body': 'declare variable $${1:varname} := ${2:expr};'
+  'fn':
+    'prefix': 'fn'
+    'body': 'declare function ${1:ns}:${2:name}(){\n  ${3:expr}\n};'
+  'module':
+    'prefix': 'module'
+    'body': 'module namespace ${1:ns} = "${2:http://www.example.com}";'


JStackTemplate: test auto title generation

--- workers/social/lib/social/models/computeproviders/stacktemplate.test.coffee
+++ workers/social/lib/social/models/computeproviders/stacktemplate.test.coffee
@@ -52,6 +52,19 @@
             expect(template.template.sum)     .to.exist
             done()

+      it 'should generate a title if title is not provided', (done) ->
+
+        withConvertedUser ({ client }) ->
+
+          stackTemplateData = generateStackTemplateData client
+          delete stackTemplateData.title
+
+          StackTemplate.create client, stackTemplateData, (err, template) ->
+            expect(err?.message)                  .not.exist
+            expect(template.title)                .to.exist
+            expect(template.title.split(' ')[1])  .to.be.equal 'Aws'
+            done()
+

   describe '#some$()', ->


payment: fix linkable payment method view

it was broken because payment method view is no longer a link


Add Python test support

Add Python test support

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafalprzywarski/test-status.git/'


Checking for previously informed error handlers

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/studio98/s98-backbone-rails-extensions.git/'


Remove verbose logging on Service fireevent

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/MicrosmartSA/ubiquity-ui.git/'


add machine.test.coffee file

add machine.test.coffee file

error: pathspec 'workers/social/lib/social/models/computeproviders/machine.test.coffee' did not match any file(s) known to git

--- workers/social/lib/social/models/computeproviders/machine.test.coffee
+++ workers/social/lib/social/models/computeproviders/machine.test.coffee
@@ -0,0 +1,1087 @@
+{ argv }                      = require 'optimist'
+{ expect }                    = require 'chai'
+{ env : { MONGO_URL } }       = process
+
+KONFIG                        = require('koding-config-manager').load("main.#{argv.c}")
+
+Bongo                         = require 'bongo'
+JUser                         = require '../user/index'
+mongo                         = MONGO_URL or "mongodb://#{ KONFIG.mongo }"
+JMachine                      = require './machine'
+
+{ daisy }                     = Bongo
+{ createUserAndMachine
+  generateMachineParams
+  generateMachineParamsByAccount} = require '../../../../testhelper/models/machinehelper'
+
+{ generateUserInfo
+  generateDummyClient
+  generateRandomString
+  generateDummyUserFormData } = require '../../../../testhelper'
+
+
+# this function will be called once before running any test
+beforeTests = -> before (done) ->
+
+  bongo = new Bongo
+    root   : __dirname
+    mongo  : mongo
+    models : ''
+
+  bongo.once 'dbClientReady', ->
+    done()
+
+
+# here we have actual tests
+runTests = -> describe 'workers.social.models.computeproviders.machine', ->
+
+  describe '#create()', ->
+
+    it 'when machine data is not valid should return error', (done) ->
+
+      client        = {}
+      machineParams = {}
+
+      queue = [
+
+        ->
+          # generating a dummy client
+          generateDummyClient { group : 'koding' }, (err, client_) ->
+            expect(err).to.not.exist
+            client = client_
+            queue.next()
+
+        ->
+          # generating machineParams to use on machine creation
+          generateMachineParams client, (err, data) ->
+            expect(err).to.not.exist
+            machineParams = data
+            queue.next()
+
+        ->
+          # sending machineParams.user null and expecting error
+          machineParams.user = null
+          JMachine.create machineParams, (err, data) ->
+            expect(err?.message).to.be.equal 'User is not set!'
+            queue.next()
+
+        -> done()
+
+      ]
+
+      daisy queue
+
+
+    describe 'when machine data is valid', ->
+
+      it 'a new machine should be created for revived client', (done) ->
+
+        client        = {}
+        machineParams = {}
+
+        queue = [
+
+          ->
+            # generating a dummy client
+            generateDummyClient { group : 'koding' }, (err, client_) ->
+              expect(err).to.not.exist
+              client = client_
+              queue.next()
+
+          ->
+            # generating machineParams to use on machine creation
+            generateMachineParams client, (err, data) ->
+              expect(err).to.not.exist
+              machineParams = data
+              queue.next()
+
+          ->
+            # expecting machine to be craeted
+            JMachine.create machineParams, (err, machine) ->
+              expect(err).to.not.exist
+              expect(machine.provider).to.be.equal machineParams.provider
+              expect(machine.status.state).to.be.equal 'NotInitialized'
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+      it 'a new machine should be created for created user', (done) ->
+
+        # creating a user and a machine with newly created user
+        createUserAndMachine generateUserInfo(), (err, machine, user) ->
+          expect(err).to.not.exist
+          expect(machine.provider).to.be.equal 'koding'
+          expect(machine.status.state).to.be.equal 'NotInitialized'
+          expect(machine.users[0].id + '').to.be.equal user.getId() + ''
+
+          done()
+
+
+  describe '#destroy()', ->
+
+    describe 'when user is the owner', ->
+
+      it 'maching should be destroyed', (done) ->
+
+        user          = {}
+        machine       = {}
+        userInfo      = generateUserInfo()
+        machineCount  = 0
+
+        queue = [
+
+          ->
+            createUserAndMachine userInfo, (err, machine_, user_) ->
+              expect(err).to.not.exist
+              user      = user_
+              machine   = machine_
+              userCount = machine.users.length
+              queue.next()
+
+          ->
+            # fetching user's first machine
+            JMachine.fetchByUsername userInfo.username, (err, machines) ->
+              expect(err).to.not.exist
+              machineCount = machines.length
+              expect(machineCount).to.be.above 0
+              queue.next()
+
+          ->
+            # expecting machine to be destroyed without error
+            _client = { r : { user } }
+            machine.destroy _client, (err) ->
+              expect(err).to.not.exist
+              queue.next()
+
+          ->
+            # fetching machine instances again expecting machine to be destroyed
+            JMachine.fetchByUsername userInfo.username, (err, machines) ->
+              expect(err).to.not.exist
+              expect(machines.length).to.be.equal machineCount - 1
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+    describe 'when user is not the owner', ->
+
+      it 'should return error', (done) ->
+
+        user          = {}
+        machine       = {}
+        userInfo      = generateUserInfo()
+        anotherUser   = {}
+        machineCount  = 0
+
+        queue = [
+
+          ->
+            createUserAndMachine userInfo, (err, machine_) ->
+              expect(err).to.not.exist
+              machine = machine_
+              userCount = machine.users.length
+              queue.next()
+
+          ->
+            JUser.createUser generateUserInfo(), (err, user_, account_) ->
+              expect(err).to.not.exist
+              anotherUser = user_
+              queue.next()
+
+          ->
+            # expecting destroy attempt with another user to fail
+            _client = { r : { user : anotherUser } }
+            machine.destroy _client, (err) ->
+              expect(err?.message).to.be.equal 'Access denied'
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+  describe '#addUsers()', ->
+
+    describe 'when data is valid', ->
+
+      it 'should be able to add a new user to machine', (done) ->
+
+        machine       = {}
+        userInfo      = generateUserInfo()
+        userCount     = 0
+        anotherUser   = {}
+
+        queue = [
+
+          ->
+            createUserAndMachine userInfo, (err, machine_) ->
+              expect(err).to.not.exist
+              machine = machine_
+              userCount = machine.users.length
+              queue.next()
+
+          ->
+            JUser.createUser generateUserInfo(), (err, user_, account_) ->
+              expect(err).to.not.exist
+              anotherUser = user_
+              queue.next()
+
+          ->
+            # expecting another user to be added
+            params =
+              targets   : [anotherUser]
+              asOwner   : yes
+              permanent : yes
+
+            machine.addUsers params, (err) ->
+              expect(err).to.not.exist
+              expect(machine.users.length).to.be.equal userCount + 1
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+    describe 'when data is not valid', ->
+
+      it 'should return error if targets.length is greater than limit', (done) ->
+
+        limit         = 50
+        queue         = []
+        targets       = []
+        machine       = {}
+
+        generateAnotherUser = (targets, queue) -> ->
+          JUser.createUser generateUserInfo(), (err, user_) ->
+            expect(err).to.not.exist
+            targets.push user_
+            queue.next()
+
+        queue.push ->
+          createUserAndMachine generateUserInfo(), (err, machine_) ->
+            machine = machine_
+            queue.next()
+
+        for i in [0...limit]
+          queue.push generateAnotherUser targets, queue
+
+        queue.push ->
+          params =
+            targets   : targets
+            asOwner   : yes
+            permanent : yes
+
+          expectedError = "Machine sharing is limited up to #{limit} users."
+          machine.addUsers params, (err) ->
+            expect(err?.message).to.be.equal expectedError
+            queue.next()
+
+        queue.push -> done()
+
+        daisy queue
+
+
+  describe '#removeUsers()', ->
+
+    describe 'when data is valid', ->
+
+      it 'user should be removed from machine', (done) ->
+
+        queue            = []
+        targets          = []
+        machine          = {}
+        userCount        = 0
+        addedUserCount   = 5
+        removedUserCount = 2
+
+        generateAnotherUser = (targets, queue) -> ->
+          JUser.createUser generateUserInfo(), (err, user_) ->
+            expect(err).to.not.exist
+            targets.push user_
+            queue.next()
+
+        queue.push ->
+          createUserAndMachine generateUserInfo(), (err, machine_) ->
+            machine = machine_
+            userCount = machine.users.length
+            queue.next()
+
+        for i in [0...addedUserCount]
+          queue.push generateAnotherUser targets, queue
+
+        # first adding users
+        queue.push ->
+          params =
+            targets   : targets
+            asOwner   : yes
+            permanent : yes
+
+          machine.addUsers params, (err) ->
+            expect(err).to.not.exist
+            expect(machine.users.length).to.be.equal userCount + addedUserCount
+            queue.next()
+
+        # then removing some users and expecting no error
+        queue.push ->
+          params =
+            targets   : targets.slice 0, removedUserCount
+            asOwner   : yes
+            permanent : yes
+
+          expectedUserCount = userCount + addedUserCount - removedUserCount
+          machine.removeUsers params, (err) ->
+            expect(err).to.not.exist
+            expect(machine.users.length).to.be.equal expectedUserCount
+            queue.next()
+
+        queue.push -> done()
+
+        daisy queue
+
+
+  describe '#shareWith()', ->
+
+    describe 'when data is not valid', ->
+
+      it 'should return error if target is not specified', (done) ->
+
+        machine       = {}
+        userInfo      = generateUserInfo()
+
+        queue = [
+
+          ->
+            createUserAndMachine userInfo, (err, machine_) ->
+              expect(err).to.not.exist
+              machine = machine_
+              queue.next()
+
+          ->
+            # expecting error when target is not specified
+            params = { target : null }
+            machine.shareWith params, (err, machine_) ->
+              expect(err?.message).to.be.equal 'Target required.'
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+      it 'should return error if target is not an instance of juser', (done) ->
+
+        machine       = {}
+        userInfo      = generateUserInfo()
+
+        queue = [
+
+          ->
+            createUserAndMachine userInfo, (err, machine_) ->
+              expect(err).to.not.exist
+              machine = machine_
+              queue.next()
+
+          ->
+            # expecting error when target is invalid
+            params = { target : ['invalidTarget'] }
+            machine.shareWith params, (err, machine_) ->
+              expect(err?.message).to.be.equal 'Target does not support machines.'
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+    describe 'when data is valid', ->
+
+      it 'should share machine if asUser if truthy', (done) ->
+
+        machine       = {}
+        userInfo      = generateUserInfo()
+        userCount     = 0
+        anotherUser   = {}
+
+        queue = [
+
+          ->
+            createUserAndMachine userInfo, (err, machine_) ->
+              expect(err).to.not.exist
+              machine = machine_
+              userCount = machine.users.length
+              queue.next()
+
+          ->
+            JUser.createUser generateUserInfo(), (err, user_) ->
+              expect(err).to.not.exist
+              anotherUser = user_
+              queue.next()
+
+          ->
+            # expecting user to be added when asUser is yes
+            params = { target : [anotherUser.username], asUser : yes }
+            machine.shareWith params, (err) ->
+              expect(err).to.not.exist
+              expect(machine.users.length).to.be.equal userCount + 1
+              queue.next()
+
+          ->
+            # expecting user to be removed when asUser is no
+            params = { target : [anotherUser.username], asUser : no }
+            machine.shareWith params, (err) ->
+              expect(err).to.not.exist
+              expect(machine.users.length).to.be.equal userCount
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+  describe '#fetchOwner()', ->
+
+    it 'should return error when there is no owner', (done) ->
+
+      machine       = {}
+      userInfo      = generateUserInfo()
+      userCount     = 0
+
+      queue = [
+
+        ->
+          createUserAndMachine userInfo, (err, machine_, user_) ->
+            expect(err).to.not.exist
+            machine = machine_
+            queue.next()
+
+        ->
+          # setting machine owner to false
+          machine.update { $set : { 'users.0.owner' : no } }, (err) ->
+            expect(err).to.not.exist
+            queue.next()
+
+        ->
+          # expecting error when there is no owner
+          machine.fetchOwner (err) ->
+            expect(err?.message).to.be.equal 'Owner user not found'
+            queue.next()
+
+        -> done()
+
+      ]
+
+      daisy queue
+
+
+    it 'should return the owner when data is valid', (done) ->
+
+      user          = {}
+      machine       = {}
+      userInfo      = generateUserInfo()
+      userCount     = 0
+
+      queue = [
+
+        ->
+          createUserAndMachine userInfo, (err, machine_, user_) ->
+            expect(err).to.not.exist
+            user    = user_
+            machine = machine_
+            queue.next()
+
+        ->
+          # expecting owner to be fecthed
+          machine.fetchOwner (err, owner) ->
+            expect(err).to.not.exist
+            expect(owner).to.exist
+            expect(owner.profile.nickname).to.be.equal user.username
+            queue.next()
+
+        -> done()
+
+      ]
+
+      daisy queue
+
+
+  describe '#one$()', ->
+
+    it 'should fetch machine instance', (done) ->
+
+      user             = {}
+      client           = {}
+      machine          = {}
+      account          = {}
+      userFormData     = generateDummyUserFormData()
+
+      queue = [
+
+        ->
+          # generating a dummy client
+          generateDummyClient { group : 'koding' }, (err, client_) ->
+            expect(err).to.not.exist
+            client = client_
+            queue.next()
+
+        ->
+          # registering a new user
+          JUser.convert client, userFormData, (err, data) ->
+            expect(err).to.not.exist
+            { account, newToken }      = data
+            client.sessionToken        = newToken
+            client.connection.delegate = account
+            queue.next()
+
+        ->
+          # fetching machine instance of newly registered user
+          JMachine.fetchByUsername userFormData.username, (err, machines) ->
+            expect(err).to.not.exist
+            machine = machines[0]
+            queue.next()
+
+        ->
+          # expecting machine to fetched by machine id and client
+          JMachine.one$ client, machine._id + '', (err, machine_) ->
+            expect(err).to.not.exist
+            expect(machine).to.exist
+            expect(machine._id + '').to.be.equal machine_._id + ''
+            queue.next()
+
+        -> done()
+
+      ]
+
+      daisy queue
+
+
+  describe '#reviveUsers()', ->
+
+    describe 'when data is not valid', ->
+
+      it 'should return error if user is not owner', (done) ->
+
+        client           = {}
+        machine          = {}
+        account          = {}
+        userFormData     = generateDummyUserFormData()
+        anotherClient    = {}
+
+        queue = [
+
+          ->
+            # generating a dummy client
+            generateDummyClient { group : 'koding' }, (err, client_) ->
+              expect(err).to.not.exist
+              client = client_
+              queue.next()
+
+          ->
+            # registering a new user
+            JUser.convert client, userFormData, (err, data) ->
+              expect(err).to.not.exist
+              { account, newToken }      = data
+              client.sessionToken        = newToken
+              client.connection.delegate = account
+              queue.next()
+
+          ->
+            # generating client for another user
+            generateDummyClient { group : 'koding' }, (err, client_) ->
+              expect(err).to.not.exist
+              anotherClient = client_
+              queue.next()
+
+          ->
+            # registering another user
+            JUser.convert anotherClient, generateDummyUserFormData(), (err, data) ->
+              expect(err).to.not.exist
+              queue.next()
+
+          ->
+            # fetching owner user's machine
+            JMachine.fetchByUsername userFormData.username, (err, machines) ->
+              expect(err).to.not.exist
+              machine = machines[0]
+              queue.next()
+
+          ->
+            # expecting error when another user attempts to revive users
+            machine.reviveUsers anotherClient, {}, (err) ->
+              expect(err?.message).to.be.equal 'Access denied'
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+    describe 'when data is valid', ->
+
+      it 'should revive users', (done) ->
+
+        client           = {}
+        machine          = {}
+        account          = {}
+        userFormData     = generateDummyUserFormData()
+
+        queue = [
+
+          ->
+            # generating a dummy client
+            generateDummyClient { group : 'koding' }, (err, client_) ->
+              expect(err).to.not.exist
+              client = client_
+              queue.next()
+
+          ->
+            # registering a new user
+            JUser.convert client, userFormData, (err, data) ->
+              expect(err).to.not.exist
+              { account, newToken }      = data
+              client.sessionToken        = newToken
+              client.connection.delegate = account
+              queue.next()
+
+          ->
+            # fetching machine of owner user
+            JMachine.fetchByUsername userFormData.username, (err, machines) ->
+              expect(err).to.not.exist
+              machine = machines[0]
+              queue.next()
+
+          ->
+            # expecting to revive users without error
+            machine.reviveUsers client, {}, (err) ->
+              expect(err?.message).to.not.exist
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+  describe '#setLabel()', ->
+
+    describe 'when data is not valid', ->
+
+      it 'should return error if user is not owner or label is empty', (done) ->
+
+        client           = {}
+        machine          = {}
+        account          = {}
+        userFormData     = generateDummyUserFormData()
+        anotherClient    = {}
+
+        queue = [
+
+          ->
+            # generating a dummy client
+            generateDummyClient { group : 'koding' }, (err, client_) ->
+              expect(err).to.not.exist
+              client = client_
+              queue.next()
+
+          ->
+            # registering a new user
+            JUser.convert client, userFormData, (err, data) ->
+              expect(err).to.not.exist
+              { account, newToken }      = data
+              client.sessionToken        = newToken
+              client.connection.delegate = account
+              queue.next()
+
+          ->
+            # generating a dummy client for another user
+            generateDummyClient { group : 'koding' }, (err, client_) ->
+              expect(err).to.not.exist
+              anotherClient = client_
+              queue.next()
+
+          ->
+            # registering another user
+            JUser.convert anotherClient, generateDummyUserFormData(), (err, data) ->
+              expect(err).to.not.exist
+              queue.next()
+
+          ->
+            # fetching machine of user
+            JMachine.fetchByUsername userFormData.username, (err, machines) ->
+              expect(err).to.not.exist
+              machine = machines[0]
+              queue.next()
+
+          ->
+            # expecting error when another user makes setLabel request
+            machine.setLabel anotherClient, 'someLabel', (err) ->
+              expect(err?.message).to.be.equal 'Access denied'
+              queue.next()
+
+          ->
+            # expecting error when label is empty
+            machine.setLabel client, '', (err) ->
+              expect(err?.message).to.be.equal 'Nickname cannot be empty'
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+    describe 'when data is valid', ->
+
+      it 'should be able set label on machine', (done) ->
+
+        client           = {}
+        machine          = {}
+        account          = {}
+        userFormData     = generateDummyUserFormData()
+
+        queue = [
+
+          ->
+            # generating a dummy client
+            generateDummyClient { group : 'koding' }, (err, client_) ->
+              expect(err).to.not.exist
+              client = client_
+              queue.next()
+
+          ->
+            # registering user
+            JUser.convert client, userFormData, (err, data) ->
+              expect(err).to.not.exist
+              { account, newToken }      = data
+              client.sessionToken        = newToken
+              client.connection.delegate = account
+              queue.next()
+
+          ->
+            # fetching machine of user
+            JMachine.fetchByUsername userFormData.username, (err, machines) ->
+              expect(err).to.not.exist
+              machine = machines[0]
+              queue.next()
+
+          ->
+            # generating random label and expecting machine label to be set to it
+            newLabel = generateRandomString()
+            machine.setLabel client, newLabel, (err) ->
+              expect(err).to.not.exist
+              expect(machine.label).to.be.equal newLabel
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+  describe '#setProvisioner()', ->
+
+    describe 'when data is not valid', ->
+
+      it 'should return error when user is not owner', (done) ->
+
+        user               = {}
+        machine            = {}
+        anotherUserAccount = {}
+
+        queue = [
+
+          ->
+            createUserAndMachine generateUserInfo(), (err, machine_, user_) ->
+              expect(err).to.not.exist
+              user    = user_
+              machine = machine_
+              queue.next()
+
+          ->
+            JUser.createUser generateUserInfo(), (err, user_, account_) ->
+              expect(err).to.not.exist
+              anotherUserAccount = account_
+              queue.next()
+
+          ->
+            # expecting error when another user makes request
+            _client =
+              connection : { delegate : anotherUserAccount }
+              context    : { group    : 'koding' }
+
+            machine.setProvisioner _client, '', (err) ->
+              expect(err?.message).to.be.equal 'Access denied'
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+    describe 'when data is valid', ->
+
+      it 'should set provisioner when user is the owner', (done) ->
+
+        user             = {}
+        client           = {}
+        machine          = {}
+        account          = {}
+        userFormData     = generateDummyUserFormData()
+        provisionerCount = 0
+
+        queue = [
+
+          ->
+            # generating a dummy client
+            generateDummyClient { group : 'koding' }, (err, client_) ->
+              expect(err).to.not.exist
+              client = client_
+              queue.next()
+
+          ->
+            # registering a new user
+            JUser.convert client, userFormData, (err, data) ->
+              expect(err).to.not.exist
+              { account, newToken }      = data
+              client.sessionToken        = newToken
+              client.connection.delegate = account
+              queue.next()
+
+          ->
+            # fetching machine of user
+            JMachine.fetchByUsername userFormData.username, (err, machines) ->
+              expect(err).to.not.exist
+              machine = machines[0]
+              queue.next()
+
+          ->
+            # expecting provisioner to be set on machine
+            machine.setProvisioner client, 'devrim/koding-base', (err) ->
+              expect(err?.message).to.not.exist
+              expect(machine.provisioners).to.exist
+              expect(machine.provisioners.length).to.be.equal provisionerCount + 1
+              queue.next()
+
+          -> done()
+
+        ]
+
+        daisy queue
+
+
+  describe '#share()', ->
+
+    it 'machine should be shared with specified users', (done) ->
+
+      client              = {}
+      machine             = {}
+      account             = {}
+      userCount           = 0
+      userFormData        = generateDummyUserFormData()
+      anotherClient       = {}
+      anotherUserFormData = generateDummyUserFormData()
+
+      queue = [
+
+        ->
+          # generating a dummy client
+          generateDummyClient { group : 'koding' }, (err, client_) ->
+            expect(err).to.not.exist
+            client = client_
+            queue.next()
+
+        ->
+          # registering a new user
+          JUser.convert client, userFormData, (err, data) ->
+            expect(err).to.not.exist
+            { account, newToken }      = data
+            client.sessionToken        = newToken
+            client.connection.delegate = account
+            queue.next()
+
+        ->
+          # generating a dummy client for another user
+          generateDummyClient { group : 'koding' }, (err, client_) ->
+            expect(err).to.not.exist
+            anotherClient = client_
+            queue.next()
+
+        ->
+          # registering another user
+          JUser.convert anotherClient, anotherUserFormData, (err, data) ->
+            expect(err).to.not.exist
+            { account, newToken }             = data
+            anotherClient.sessionToken        = newToken
+            anotherClient.connection.delegate = account
+            queue.next()
+
+        ->
+          # fetching machine of user
+          JMachine.fetchByUsername userFormData.username, (err, machines) ->
+            expect(err).to.not.exist
+            machine = machines[0]
+            userCount = machine.users.length
+            queue.next()
+
+        ->
+          # expecting machine to be shared with anotherUser
+          machine.share client, [anotherUserFormData.username], (err) ->
+            expect(err?.message).to.not.exist
+            expect(machine.users.length).to.be.equal userCount + 1
+            queue.next()
+
+        -> done()
+
+      ]
+
+      daisy queue
+
+
+  describe '#approve()', ->
+
+    it 'should approve client', (done) ->
+
+      machine            = {}
+      userInfo           = generateUserInfo()
+      machineId          = null
+      anotherUser        = {}
+      anotherUserAccount = {}
+
+      queue = [
+
+        ->
+          createUserAndMachine userInfo, (err, machine_) ->
+            expect(err).to.not.exist
+            machine   = machine_
+            userCount = machine.users.length
+            machineId = machine._id
+            queue.next()
+
+        ->
+          JUser.createUser generateUserInfo(), (err, user_, account_) ->
+            expect(err).to.not.exist
+            anotherUser        = user_
+            anotherUserAccount = account_
+            queue.next()
+
+        ->
+          # sharing maching with another user
+          params = { target : [anotherUser.username], asUser : yes }
+          machine.shareWith params, (err) ->
+            expect(err).to.not.exist
+            queue.next()
+
+        ->
+          # approving share
+          _client =
+            connection : { delegate : anotherUserAccount }
+            context    : { group    : 'koding' }
+
+          machine.approve _client, (err) ->
+            expect(err).to.not.exist
+            queue.next()
+
+        ->
+          # expecting another user to be approved
+          JMachine.one { _id : machineId }, (err, machine) ->
+            expect(err?.message).to.not.exist
+            expect(machine.users[1].approved).to.be.ok
+            queue.next()
+
+        -> done()
+
+      ]
+
+      daisy queue
+
+
+  describe '#deny()', ->
+
+    it 'should deny client', (done) ->
+
+      machine            = {}
+      userInfo           = generateUserInfo()
+      machineId          = null
+      userCount          = 0
+      anotherUser        = {}
+      anotherUserAccount = {}
+
+      queue = [
+
+        ->
+          createUserAndMachine userInfo, (err, machine_) ->
+            expect(err).to.not.exist
+            machine   = machine_
+            userCount = machine.users.length
+            machineId = machine._id
+            queue.next()
+
+        ->
+          JUser.createUser generateUserInfo(), (err, user_, account_) ->
+            expect(err).to.not.exist
+            anotherUser        = user_
+            anotherUserAccount = account_
+            queue.next()
+
+        ->
+          # sharing machine with another user
+          params = { target : [anotherUser.username], asUser : yes }
+          machine.shareWith params, (err) ->
+            expect(err).to.not.exist
+            expect(machine.users.length).to.be.equal userCount + 1
+            queue.next()
+
+        ->
+          # denying share request
+          _client =
+            connection : { delegate : anotherUserAccount }
+            context    : { group    : 'koding' }
+
+          machine.deny _client, (err) ->
+            expect(err).to.not.exist
+            queue.next()
+
+        ->
+          # expecting user not to be added to machine.users
+          JMachine.one { _id : machineId }, (err, machine) ->
+            expect(err).to.not.exist
+            expect(machine.users.length).to.be.equal userCount
+            queue.next()
+
+        -> done()
+
+      ]
+
+      daisy queue
+
+
+beforeTests()
+
+runTests()
+
+


Remove arrow

Remove arrow


Fix #finally() method for updated implementation.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JoshuaToenyes/stout-core.git/'


Admin: Integrations: Create common view class.

To get action and identifier params in url and set it to options.

error: pathspec 'client/admin/lib/views/integrations/adminintegrationcommonview.coffee' did not match any file(s) known to git

--- client/admin/lib/views/integrations/adminintegrationcommonview.coffee
+++ client/admin/lib/views/integrations/adminintegrationcommonview.coffee
@@ -0,0 +1,14 @@
+kd           = require 'kd'
+JView        = require 'app/jview'
+
+module.exports = class AdminIntegrationCommonView extends JView
+
+  constructor: (options = {}, data) ->
+
+    path = kd.singletons.router.getCurrentPath()
+    [ identifier, action ] = path.split('/').reverse()
+
+    options.action     = action
+    options.identifier = identifier
+
+    super options, data


Fix side panel tests

Fix side panel tests

--- bokehjs/test/core/layout/side_panel.coffee
+++ bokehjs/test/core/layout/side_panel.coffee
@@ -13,6 +13,7 @@
 BasicTicker = utils.require("models/tickers/basic_ticker").Model
 BasicTickFormatter = utils.require("models/formatters/basic_tick_formatter").Model
 Plot = utils.require("models/plots/plot").Model
+PlotCanvas = utils.require("models/plots/plot_canvas").Model
 PlotView = utils.require("models/plots/plot").View
 Range1d = utils.require("models/ranges/range1d").Model
 Toolbar = utils.require("models/tools/toolbar").Model
@@ -65,16 +66,24 @@
       @solver_add_constraint = solver_stubs['add']
       @solver_remove_constraint = solver_stubs['remove']

-      @test_plot = new Plot({ x_range: new Range1d({start: 0, end: 1}), y_range: new Range1d({start: 0, end: 1}), toolbar: new Toolbar()})
+      doc = new Document()
+      plot = new Plot({
+        x_range: new Range1d({start: 0, end: 1})
+        y_range: new Range1d({start: 0, end: 1})
+        toolbar: new Toolbar()
+      })
       @axis = new Axis({ ticker: new BasicTicker(), formatter: new BasicTickFormatter() })
-      @test_plot.add_layout(@axis, 'below')
-      @test_plot.attach_document(new Document())
-      @test_plot_view = new @test_plot.default_view({ 'model': @test_plot })
-      @axis_view = new @axis.default_view({ model: @axis, plot_model: @test_plot, plot_view: @test_plot_view })
+      plot.add_layout(@axis, 'below')
+      plot.attach_document(doc)
+      plot_view = new plot.default_view({ 'model': plot })
+      @plot_canvas = new PlotCanvas({ 'plot': plot })
+      @plot_canvas.attach_document(doc)
+      @plot_canvas_view = new @plot_canvas.default_view({ 'model': @plot_canvas })
+      @axis_view = new @axis.default_view({ model: @axis, plot_model: @plot_canvas, plot_view: @plot_canvas_view })

     it "should not fail if visible is not on model", ->
       an = new Annotation()
-      an_view = new an.default_view({model: an, plot_model: @test_plot, plot_view: @test_plot_view})
+      an_view = new an.default_view({model: an, plot_model: @plot_canvas, plot_view: @plot_canvas_view})
       expect(an_view._size_constraint).to.be.undefined
       update_constraints(an_view)
       # Should still be undefined because visible is false


changed sort order from -1 to desc [deploy: production]

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/domjtalbot/Portfolio.git/'


Added coderwall script to hubot-script repo.

error: pathspec 'src/scripts/coderwall.coffee' did not match any file(s) known to git

--- src/scripts/coderwall.coffee
+++ src/scripts/coderwall.coffee
@@ -0,0 +1,23 @@
+# Messing around with the Coderwall API.
+#
+# coderwall <coderwall username> - Returns coder achievements from coderwall.com
+#
+module.exports = (robot) ->
+  robot.respond /(coderwall)( me)? (.*)/i, (msg) ->
+    user = msg.match[3]
+    msg.http("http://coderwall.com/"+user+".json")
+      .get() (err, res, body) ->
+        # If not response bad username
+        if res.headers['content-length'] <= 1
+          msg.send "Sorry I cannot find "+user+"'"+(user.substr(-1)=='s'?'':'s')+" coderwall"
+        # Else return the coder badges
+        else
+          profile = JSON.parse(body)
+          # Give an intro to the coderwall profile
+          resp_str = "";
+          resp_str += user + "'s coderwall -> http://coderwall.com/"+user + "\n"
+          # Iterate all badges and continue building string
+          profile.badges.forEach (badge) ->
+            resp_str += badge.name + " - " + badge.description + "\n"
+          # Return response
+          msg.send resp_str


[elevator]: Added missing file

[elevator]: Added missing file

error: pathspec 'client/src/es/deusto/weblab/public/jslabs/elevator/app/scripts/directives/wlelevatorcontrols.coffee' did not match any file(s) known to git

--- client/src/es/deusto/weblab/public/jslabs/elevator/app/scripts/directives/wlelevatorcontrols.coffee
+++ client/src/es/deusto/weblab/public/jslabs/elevator/app/scripts/directives/wlelevatorcontrols.coffee
@@ -0,0 +1,15 @@
+'use strict'
+
+###*
+ # @ngdoc directive
+ # @name elevatorApp.directive:wlelevatorcontrols
+ # @description
+ # Virtual controls for the control box that is within the elevator's cabin.
+###
+angular.module('elevatorApp')
+  .directive('wlElevatorControls', ->
+    templateUrl: 'views/wlelevatorcontrols.html',
+    restrict: 'E'
+    link: (scope, element, attrs) ->
+      pass
+  )


raspberrypi4-64: Add device type

raspberrypi4-64: Add device type

Changelog-entry: Add support for Raspberry Pi 4 (64bit)
Signed-off-by: Andrei Gherzan <8dc7c09356db0b1762fb140617d7375c0a5a4131@balena.io>

error: pathspec 'raspberrypi4-64.coffee' did not match any file(s) known to git

--- raspberrypi4-64.coffee
+++ raspberrypi4-64.coffee
@@ -0,0 +1,35 @@
+deviceTypesCommon = require '@resin.io/device-types/common'
+{ networkOptions, commonImg, instructions } = deviceTypesCommon
+
+module.exports =
+	version: 1
+	slug: 'raspberrypi4-64'
+	aliases: [ 'raspberrypi4-64' ]
+	name: 'Raspberry Pi 4 (using 64bit OS)'
+	arch: 'aarch64'
+	state: 'experimental'
+
+	instructions: commonImg.instructions
+	gettingStartedLink:
+		windows: 'https://docs.resin.io/raspberrypi4/nodejs/getting-started/#adding-your-first-device'
+		osx: 'https://docs.resin.io/raspberrypi4/nodejs/getting-started/#adding-your-first-device'
+		linux: 'https://docs.resin.io/raspberrypi4/nodejs/getting-started/#adding-your-first-device'
+	supportsBlink: true
+
+	options: [ networkOptions.group ]
+
+	yocto:
+		machine: 'raspberrypi4-64'
+		image: 'resin-image'
+		fstype: 'resinos-img'
+		version: 'yocto-warrior'
+		deployArtifact: 'resin-image-raspberrypi4-64.resinos-img'
+		compressed: true
+
+	configuration:
+		config:
+			partition:
+				primary: 1
+			path: '/config.json'
+
+	initialization: commonImg.initialization


extracted statements()

extracted statements()

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/showell/CoffeeCoffee.git/'


rename JProviderInterface to ProviderInterface

--- workers/social/lib/social/models/computeproviders/providerinterface.test.coffee
+++ workers/social/lib/social/models/computeproviders/providerinterface.test.coffee
@@ -1,4 +1,4 @@
-JProviderInterface = require './providerinterface'
+ProviderInterface = require './providerinterface'

 { expect
   checkBongoConnectivity }         = require '../../../../testhelper'
@@ -18,7 +18,7 @@
     it 'it should be able fetch credential data ', (done) ->

       withConvertedUserAndCredential ({ client, credential }) ->
-        JProviderInterface.fetchCredentialData credential, (err, credData) ->
+        ProviderInterface.fetchCredentialData credential, (err, credData) ->
           expect(err).to.not.exist
           expect(credData).to.be.an 'object'
           expect(credData.meta).to.be.an 'object'


pricing: show promoted hobbyist if user is not logged in

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/andrewjcasal/koding.git/'


AceView: windowDidResize: no need update height, ace.resize is enough

--- client/ace/lib/aceview.coffee
+++ client/ace/lib/aceview.coffee
@@ -241,10 +241,7 @@
     , { inputDefaultValue: file.name, machine: file.machine }

   _windowDidResize: ->
-    height = @getHeight()
-    bottomBarHeight = @$('.editor-bottom-bar').height()
-    newHeight = height - bottomBarHeight
-    @ace.setHeight newHeight unless newHeight is 0
+    @ace?.editor?.resize()

   viewAppended: ->
     super


Example in which steps are not all known in advance

error: pathspec 'samples/googlepagination.coffee' did not match any file(s) known to git

--- samples/googlepagination.coffee
+++ samples/googlepagination.coffee
@@ -0,0 +1,40 @@
+# get multiple pages of google search results
+#
+#   usage:  phantomjs googlepagination.coffee my search terms
+#
+#   (all arguments will be used as the query)
+#
+phantom.injectJs('casper.js')
+
+links = []
+casper = new phantom.Casper
+
+casper.start 'http://google.com', ->
+  @fill 'form[name=f]',  q: phantom.args.join(' '), true
+  @click 'input[value="Google Search"]'
+
+casper.then ->
+  # google's being all ajaxy, wait for results to load...
+  @waitForSelector 'table#nav', ->
+    processPage = (cspr) ->
+      currentPage = Number cspr.evaluate(-> document.querySelector('table#nav td.cur').innerText), 10
+      currentPage = 1 if currentPage == 0
+      cspr.capture "google-results-p#{ currentPage }.png"
+
+      # don't go too far down the rabbit hole
+      return if currentPage >= 5
+
+      cspr.evaluate ->
+        if nextLink = document.querySelector('table#nav td.cur').nextElementSibling?.querySelector('a')
+          nextLink.setAttribute 'id', 'next-page-of-results'
+
+      nextPage = 'a#next-page-of-results'
+      if cspr.exists nextPage
+        cspr.echo 'requesting next page...'
+        cspr.thenClick(nextPage).then(processPage)
+      else
+        cspr.echo "that's all, folks."
+
+    processPage(casper)
+
+casper.run -> @exit()


adds device.compass test to testSpecApp.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/AppGyver/supersonic.git/'


[preproc] You know what? fuck this

[preproc] You know what? fuck this

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/demhydraz/cafe.git/'


Update canvas size when scene size changed


race condition was fixed.

race condition was fixed.

--- client/landing/app/MainApp/maincontroller/mainviews/appsettingsmenubutton.coffee
+++ client/landing/app/MainApp/maincontroller/mainviews/appsettingsmenubutton.coffee
@@ -64,4 +64,5 @@
         placement : "right"
         margin    : 5
     , menu
-    @contextMenu.setWidth @menuWidth  if @menuWidth > 172
+    @contextMenu.on "viewAppended", =>
+      @contextMenu.setWidth @menuWidth  if @menuWidth > 172


Only set __proto__ in TermBase if it exists

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/grandquista/rethinkdb.git/'