小编And*_*rew的帖子

节点的断言是否完全断开?

鉴于此代码:

var assert = require('assert');

function boom(){
    throw new Error('BOOM');
}

assert.throws( boom(), Error );
Run Code Online (Sandbox Code Playgroud)

我得到这个输出,节点0.4.9:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: BOOM
    at boom ([EDITED]/assert.throws.test.js:4:9)
    at Object.<anonymous> ([EDITED]/assert.throws.test.js:7:17)
    at Module._compile (module.js:402:26)
    at Object..js (module.js:408:10)
    at Module.load (module.js:334:31)
    at Function._load (module.js:293:12)
    at Array.<anonymous> (module.js:421:10)
    at EventEmitter._tickCallback (node.js:126:26)
Run Code Online (Sandbox Code Playgroud)

对我来说,这意味着发生了未捕获的异常,而不是报告的异常.查看文档,我注意到示例看起来更像是这样的:

var assert = require('assert');

function boom(){
    throw new Error('BOOM');
}

assert.throws( boom, Error );
Run Code Online (Sandbox Code Playgroud)

但是,如果给出一定的输入,你如何测试它是否会抛出异常?例如:

var assert = require('assert');

function boom(blowup){
    if(blowup)
        throw new …
Run Code Online (Sandbox Code Playgroud)

unit-testing node.js

33
推荐指数
3
解决办法
2万
查看次数

是否可以在.gitconfig中为每个通配符域配置user.name和user.email?

我有一台工作计算机,全局配置为在提交时使用我的工作电子邮件和名称.这很好.但是,我想制定某种规则,"如果回购来源是github,请使用用户X和电子邮件Y"

我意识到你可以为每个存储库创建一个配置条目,但我希望它更自动:如果克隆是github,它应该使用github用户详细信息.如果我从工作中克隆,它应该使用工作细节.

有没有办法根据远程域全局配置?或者另一种方式?

编辑/ UPDATE

我接受了下面的答案,但稍微修改了一下脚本:

#!/usr/bin/env bash

# "Real" git is the second one returned by 'which'
REAL_GIT=$(which -a git | sed -n 2p)

# Does the remote "origin" point to GitHub?
if ("$REAL_GIT" remote -v 2>/dev/null | grep '^origin\b.*github.com.*(push)$' >/dev/null 2>&1); then

    # Yes.  Set username and email that you use on GitHub.
    export GIT_AUTHOR_NAME=$("$REAL_GIT" config --global user.ghname)
    export GIT_AUTHOR_EMAIL=$("$REAL_GIT" config --global user.ghemail)

fi

"$REAL_GIT" "$@"
Run Code Online (Sandbox Code Playgroud)

主要添加是需要两个git config值.

git config --global user.ghname "Your Name"
git config …
Run Code Online (Sandbox Code Playgroud)

git github

30
推荐指数
4
解决办法
8941
查看次数

将大型仓库拆分为多个子仓库并保留历史记录(Mercurial)

我们有一大堆代码,包含SVN中一个目录中的几个共享项目,解决方案文件等.我们正在迁移到Mercurial.我想借此机会将我们的代码重新组织到几个存储库中,以便克隆分支的开销更少.我已经成功地将我们的回购从SVN转换为Mercurial,同时保留了历史.我的问题:如何在保留历史记录的同时将所有不同的项目分解为单独的存储库?

以下是我们的单个存储库(OurPlatform)目前的示例:

/OurPlatform
---- Core
---- Core.Tests
---- Database
---- Database.Tests
---- CMS
---- CMS.Tests
---- Product1.Domain
---- Product1.Stresstester
---- Product1.Web
---- Product1.Web.Tests
---- Product2.Domain
---- Product2.Stresstester
---- Product2.Web
---- Product2.Web.Tests
==== Product1.sln
==== Product2.sln
Run Code Online (Sandbox Code Playgroud)

所有这些都是包含VS项目的文件夹,解决方案文件除外.Product1.sln和Product2.sln都引用了所有其他项目.理想情况下,我想采取每个文件夹,并将它们转换为单独的Hg回购,并为每个项目添加新的回购(它们将充当父回购).然后,如果有人打算使用Product1,他们将克隆Product1 repo,其中包含Product1.sln和Subrepo对ReferenceAssemblies,Core,Core.Tests,Database,Database.Tests,CMS和CMS.Tests的引用.

因此,通过项目目录中的hg init'ing很容易做到这一点.但这可以在保存历史的同时完成吗?或者有更好的方法来安排这个吗?

编辑::::

感谢Ry4an的回答,我完成了我的目标.我想分享我在这里为别人做的事情.

由于我们有很多单独的项目,我编写了一个小的bash脚本来自动创建文件映射并创建最终的bat脚本来实际进行转换.从答案中不完全明显的是,convert命令需要为每个文件映射运行一次,以便为每个项目生成一个单独的存储库.此脚本将放在您先前转换的svn工作副本上方的目录中.我使用了工作副本,因为它的文件结构最符合我想要的最终新的hg repos.

#!/bin/bash

# this requires you to be in: /path/to/svn/working/copy/, and issue: ../filemaplister.sh ./

for filename in *
do
  extension=${filename##*.} #$filename|awk -F . '{print $NF}'
  if [ "$extension" == "sln" -o "$extension" == "suo" -o "$extension" == "vsmdi" …
Run Code Online (Sandbox Code Playgroud)

svn mercurial visual-studio subrepos

29
推荐指数
1
解决办法
4140
查看次数

从Git中的单个分支中删除提交

我有两个分支,master和feature1.当我意识到我需要处理其他不相关的东西时,我正在研究feature1.不幸的是,我忘了从master分支,而是从feature1创建了我的feature2分支.现在我想将feature2合并到master中,但不能,因为该分支中有feature1的部分内容.

如何从feature2分支中删除feature1提交?是否涉及变基?

我觉得如果我可以将feature2的起始参考点更改为master的位置,那可能有所帮助,但不知道如何.

编辑:

谢谢你的答案!我根据@ Mark的解决方案尝试了变基础,但意识到历史比我原先想象的要复杂得多.功能2已合并到其他功能分支中,并且master已在一个点合并到feature2中.master上还有其他与feature2无关的提交.一切仍然是本地的.

真的,我的历史更像是这样的:

A - B - C - D - - - - - - - - - - - - - L - M  master  
            |                          
            |               - I - J - K  feature2                  
            \              /           \
             - E - F - G - H - - - - - -N - O - P  feature1
Run Code Online (Sandbox Code Playgroud)

我想要的是这个:

A - B - C - D - - - - - - - - - - …
Run Code Online (Sandbox Code Playgroud)

git branch

27
推荐指数
1
解决办法
2万
查看次数

是否可以在PHP中引用自身内部的匿名函数?

我正在尝试做类似以下的事情:

// assume $f is an arg to the wrapping function
$self = $this;
$func = function() use($f, $ctx, $self){

    $self->remove($func, $ctx); // I want $func to be a reference to this anon function

    $args = func_get_args();
    call_user_func_array($f, $args);
};
Run Code Online (Sandbox Code Playgroud)

是否可以使用相同的函数引用分配给$ func的函数?

php closures anonymous-function

18
推荐指数
1
解决办法
2280
查看次数

带有SUBREPOS的Mercurial分支存储库

我正在尝试确定人们如何使用"分支存储库",同时还使用subrepos.

假设我有一个repo Main包含一个解决方案文件(.NET),并填充了subrepos A,B,C:

/Main
    - A
    - B
    - C
    MainSolution.sln
Run Code Online (Sandbox Code Playgroud)

A,B和C在其他"主"回购之间共享时,非常紧密地集成到主项目中.因此,Main repo的一个主要特性将需要修改subrepos(即,它们是共享库,但是非常积极地开发).

现在是时候添加一个功能了.此功能对于一个人来说太大了,因此需要将代码推送到中央仓库,以便其他人可以提供帮助.我们还需要能够在功能开发开始之前回到最后的"稳定"代码,以防需要修复错误.我相信在这一点上我有两个选择:(1)在Main repo中创建一个命名分支,或者(2)创建一个Main的新克隆.由于存在subrepos,这两种选项都会产生不典型的反响.

选项1)我认为,创建一个命名分支将允许修改subrepos以进行提交/推送,但是只有在其Main的克隆中也更新到该分支的其他人将受到影响,因为跟踪了.hgsubstate文件.然而,subrepos将获得一个新的头,因此(可能)实验功能最终会被推到中央回购.我理解正确吗?

选项2)有许多倡导者"不使用命名分支,使用'分支存储库'",它们实际上是主要仓库的克隆,但命名不同并存在于中央服务器上.这对我来说有点吸引力,因为它似乎让事情分离(因此与同事脱离了灾难 - 而我自己! - 仍在学习Mercurial).但是当涉及子存储库时,这个工作流似乎完全被打破,因为创建主存储库的克隆不会创建子库的新的,分离的克隆.这是一个新的克隆,但它仍然指向相同的子目录,因此对它们所做的更改将找回返回子项目的方式!我意识到这是设计的,对于Mercurial而言,这是一件非常酷的事情(对我而言).但人们如何在子库中使用此分支存储库工作流?完全不可思议的是,对于每个功能/实验/版本/无论如何,我将在主仓库中创建一个新的克隆(在中央服务器上),并在子目录中创建克隆(在中央服务器上),AND修改所有.hgrc/.hgsub路径以指向正确的中央回购.

在这一点上,我只是想了解人们如何处理一个复杂的项目并使用subrepos与分支存储库.有什么想法吗?

mercurial branch

11
推荐指数
1
解决办法
1766
查看次数

Array(5)等效于var a = []; a.length = 5; 在JS?

我看到在JS中将数组初始化为特定长度的四个选项(最后一个是拉伸,我知道):

var a = []; a.length = 5;

var a = Array(5);

var a = []; a[4] = undefined;

var a = new Array(5);

function makeArrayToLength(length, default){
    var a = [], i = 0;
    for(; i < length; i++){
        a[i] = default;
    }
    return a;
}
Run Code Online (Sandbox Code Playgroud)

我绝对希望(并且确实)尽可能地使用文字,但我处于特定数组的定义方面是它的长度的情况,所以我倾向于Array(5).第一个例子在最终结果方面是否等同于第二个例子?我意识到它在执行中并不等同.

javascript arrays constructor literals

11
推荐指数
1
解决办法
7404
查看次数

任何人都可以解释这个关于字符串连接的奇怪的JS行为吗?

我刚刚发布了这个要点:https://gist.github.com/2228570

var out = '';

function doWhat(){
    out += '<li>';
    console.log(out === '<li>'); // at this point, out will equal '<li>'
    return '';
}

out += doWhat();
console.log(out, out === '<li>');
// I expect out to == '<li>', but it's actually an empty string!?
Run Code Online (Sandbox Code Playgroud)

这种行为很奇怪,有没有人有解释?谷歌这是一件很难的事情.如果你使用out +=或者也没有区别out = out +.

编辑:@paislee做了一个JSFiddle,它演示了如果在一个单独的行上做什么,它表现如预期的那样:http://jsfiddle.net/paislee/Y4WE8/

javascript string scope

10
推荐指数
2
解决办法
162
查看次数

在PHP SESSION中缓存数据,还是每次从db查询?

它是"更好"(更高效,更快,更安全等)到(A)缓存数据,用于$ _SESSION数组中的每个页面加载(但仍然查询表以获取标记以重新加载数据),或者(B)每次从数据库加载它?

我正在使用缓存方法(A),但我担心有数百个用户,内存可能会成为一个问题?它只是简单的数据,如名字,姓氏,生日等.

无论使用哪种方法,仍然会运行查询.思考?

php mysql caching session-variables

7
推荐指数
1
解决办法
3358
查看次数

ASP.NET MVC的Razor View Engine的源代码位于何处?

我想研究一下Razor视图引擎的来源.由于MS提供了MVC的源代码,我认为Razor也可用......但是无法找到它.有什么建议?

razor asp.net-mvc-3

6
推荐指数
1
解决办法
3498
查看次数

Grunt:如何将两个多任务组合成另一个多任务插件?

我有几个npm模块,我想使用常见的linting配置.我有jshint和关闭linter通过Grunt在一个项目上工作.但是复制/粘贴每个项目的.jshintignore文件和.jshintrc文件将变得难以处理,尤其是在需要更改某些内容时.理想情况下,我希望有一个单独的grunt任务封装了通用配置,可以通过它加载

grunt.loadNpmTasks('grunt-mysuperlint');
Run Code Online (Sandbox Code Playgroud)

哪里grunt-my-common-lint-tasks是两个jshint和封闭棉短绒真的只是特定的默认配置.

但我认为没有办法将两个现有的grunt插件组合成一个唯一真实的组合是选项和目标的合并.

这可能吗?

我应该这样做:

grunt.registerMultiTask('mysuperlint', function() {
    // Manual options merging?
    var opts = this.options({
        jshint: { src: 'scripts/**/*.js', options: { ... } },
        closureLinter: { src: 'scripts/**/*.js', options: { ... } }
    });
    grunt.config.set('jshint.dev', opts.jshint);
    grunt.config.set('closureLinter.dev', opts.closureLinter);
    grunt.task.run('jshint:dev');
    grunt.task.run('closureLinter:dev');
});
Run Code Online (Sandbox Code Playgroud)

任何帮助或指示将非常感激.

gruntjs

6
推荐指数
1
解决办法
369
查看次数

如何在PHP中动态访问类const?

假设我有一个这样的课程:

class Order {

    const STATUS_INITIALIZED = 'initialized';
    const STATUS_ORDERED = 'ordered';
}
Run Code Online (Sandbox Code Playgroud)

而且我想像这样抓住常数:

$status = $_GET['status']; // ?status=STATUS_ORDERED
Run Code Online (Sandbox Code Playgroud)

有没有办法访问常量的值,给定常量的名称作为字符串?

我试过了:

Order::$status
Order::$$status
Run Code Online (Sandbox Code Playgroud)

php get constants

5
推荐指数
1
解决办法
2768
查看次数

如何将特定更改集推送到Mercurial中的共享库存储库?

我有一个名为MySharedLib的仓库,另一个名为MyProject的仓库.MySharedLib通过强制拉动(如Jedi)包含在许多不同的回购中,而不是使用子版本.

如果克隆MyProject,则会留下以下结构:

/MyProject
    MySharedLib
    OtherStuff
    Files...
Run Code Online (Sandbox Code Playgroud)

MySharedLib不是subrepo.从MySharedLib中提取更改就像运行一样简单:

hg pull -f path/to/MySharedLib.
Run Code Online (Sandbox Code Playgroud)

但是如果对/ MyProject/MySharedLib进行了更改,那么将这些更改仅推送到MySharedLib存储库的最简单/标准方法是什么?

MQ?hg出口?hg diff?hg移植?我的理解是,几乎所有这些选项都有效(有些在一起,有些在一起),但我想要一些方向.

然后,如果开发者提交包含MySharedLib中的其他文件的提交,会发生什么?显然这是要避免的,但我只是好奇.

mercurial shared-libraries

3
推荐指数
1
解决办法
1041
查看次数