鉴于此代码:
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) 我有一台工作计算机,全局配置为在提交时使用我的工作电子邮件和名称.这很好.但是,我想制定某种规则,"如果回购来源是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) 我们有一大堆代码,包含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) 我有两个分支,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) 我正在尝试做类似以下的事情:
// 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的函数?
我正在尝试确定人们如何使用"分支存储库",同时还使用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与分支存储库.有什么想法吗?
我看到在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).第一个例子在最终结果方面是否等同于第二个例子?我意识到它在执行中并不等同.
我刚刚发布了这个要点: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/
它是"更好"(更高效,更快,更安全等)到(A)缓存数据,用于$ _SESSION数组中的每个页面加载(但仍然查询表以获取标记以重新加载数据),或者(B)每次从数据库加载它?
我正在使用缓存方法(A),但我担心有数百个用户,内存可能会成为一个问题?它只是简单的数据,如名字,姓氏,生日等.
无论使用哪种方法,仍然会运行查询.思考?
我想研究一下Razor视图引擎的来源.由于MS提供了MVC的源代码,我认为Razor也可用......但是无法找到它.有什么建议?
我有几个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)
任何帮助或指示将非常感激.
假设我有一个这样的课程:
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) 我有一个名为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中的其他文件的提交,会发生什么?显然这是要避免的,但我只是好奇.