我对Mercurial相对较新,我的团队现在正在尝试将其作为Subversion的替代品.
如何将单个文件提交并推送到另一个存储库,同时保留我的工作目录中的其他修改未提交(或者至少不推送到其他存储库)?
这种情况发生在我们的数据库迁移中.我们希望将迁移提交到源代码控制,以便DBA可以在我们处理代码修改时查看和编辑它,以便与数据库迁移一起进行.这些变化还没有准备好,所以我们不想把它们全部推出去.
在颠覆中,我只是这样做:
svn add my_migration.sql
# commit only the migration, but not the other files I'm working on
svn commit -m "migration notes" my_mygration.sql
Run Code Online (Sandbox Code Playgroud)
并继续在当地工作.
这不适用于mercurial,因为当我将它推送到另一个存储库时,如果我没有删除它的更改,它希望我将它们拉下来,合并它们并将该合并提交到存储库.合并后提交不允许您省略文件,因此它会强制您提交本地存储库中的所有内容.
我能想到的最简单的事情是将文件提交到我的本地存储库,克隆我的本地存储库,从实际存储库中获取任何新的更改,合并它们并提交该合并,然后它们将我的更改推送出去.
hg add my_migration.sql
hg commit -m "migration notes" my_migration.sql
cd ..
hg clone project project-clone
cd project-clone
hg fetch http://hg/project
hg push http://hg/project
Run Code Online (Sandbox Code Playgroud)
这样可行,但感觉我错过了一些更简单的东西,某种方式告诉mercurial忽略我工作目录中已有的文件,只需进行合并并发送文件.我怀疑mercurial队列可以做到这一点,但我还没有完全搞定mq.
我是一位经验丰富的Grails开发人员,但我的大多数经验都是使用grails将JSON/XML提供给flex应用程序和一些相对简单的HTML网站.
我一直在深入研究使用grame中的sitemesh集成,我正在努力寻找一些更复杂的配置的最佳实践,我很好奇是否有任何好的教程或示例.在原来的SiteMesh的网站是不是因为它谈论Grails中不直接暴露标签有用.
谷歌搜索主要显示旧的邮件列表帖子和一些vanilla sitemesh的东西,这有助于我进一步向前移动,但这是一个很多的试验和错误.
我完全理解基本的g:layoutTitle,g:layoutHead和g:layoutBody标签是如何工作的.这些都很容易并且有很好的记录
我想看到的例子:
g:applyLayout - 关于这方面的文档很薄弱,我不完全理解主文档中建议的用法.这与设置meta name='layout' content='foo'属性有何不同?
g:pageProperty - 一些关于如何通过在正在修饰的页面中将值设置为元标记来将属性拉入主模板并使用属性的更好示例.pageProperty上的grails文档仅显示正在提出的正文的onload属性.我认为你也可以在这里使用元标记值,还有其他什么?
你可以使用多个级别的sitemesh布局?我的测试似乎让我觉得我做不到,但这似乎减少了可重用性.我认为这里的答案是g:applyLayout的一些用法,但那是我最挣扎的地方.
我正在使用Gradle帮助自动执行Hadoop任务.在调用Hadoop时,我需要能够将路径传递给我的代码所依赖的一些jar,以便Hadoop可以在map/reduce阶段发送该依赖项.
我发现了一些有用的东西,但它感觉很乱,我想知道是否有某个功能我在某处丢失了.
这是我的gradle脚本的简化版本,它依赖于solr 3.5.0 jar,以及一个findSolrJar遍历配置中所有jar文件的任务,以找到正确的:
apply plugin: 'groovy'
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.solr:solr-solrj:3.5.0'
}
task findSolrJar() {
println project.configurations.compile*.toURI().find { URI uri -> new File(uri).name == 'solr-solrj-3.5.0.jar'}
}
Run Code Online (Sandbox Code Playgroud)
运行这个给我这样的输出:
gradle findSolrJar
file:/Users/tnaleid/.gradle/caches/artifacts-8/filestore/org.apache.solr/solr-solrj/3.5.0/jar/74cd28347239b64fcfc8c67c540d7a7179c926de/solr-solrj-3.5.0.jar
:findSolrJar UP-TO-DATE
BUILD SUCCESSFUL
Total time: 2.248 secs
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
基本上有一个很好的优雅机制来模拟super语法,就像下面的一样简单
this.$super.prop() this.$super.prop.apply(this, arguments);坚持的标准是:
this.$super必须是原型的参考.即如果我在运行时更改超级原型,将反映此更改.这基本上意味着父母有一个新的属性然后这应该在所有孩子的运行时显示,super就像对父母的硬编码引用将反映更改this.$super.f.apply(this, arguments);必须适用于递归调用.对于任何链接的继承集,其中在继承链上进行多次超级调用时,您不能遇到递归问题.Base.prototype.f.apply(this, arguments);告诫这一点.天真的实现将是这样的.
var injectSuper = function (parent, child) {
child.prototype.$super = parent.prototype;
};
Run Code Online (Sandbox Code Playgroud)
但这打破了条件2.
我见过的最优雅的机制是IvoWetzel的evalhack,它几乎是一个JavaScript预处理器,因此没有标准4.
有没有简单的方法来告诉classSwift中的实例变量是什么?在我习惯的基于JVM的语言中,你可以做类似的事情println(value.class)来获得它的类.
在Swift中有相同的东西吗?
我在文档中最接近的是能够使用is <Class>关键字进行"类型检查",但这只能帮我猜一点.
我遇到过一些情况,我认为我有一种类型,但实际上有另一种,并且不知道如何确定.
我有一个ExtJS(4.0.7)GridPanel,我正在从商店中填充.我在GridPanel列中显示的值需要具有不同的视图,具体取决于记录中的数据类型.
最终目标是记录的type属性具有"双"或"整数"值的记录向用户提供他们可以调整的滑块,而一种"字符串"只是呈现一些只读文本.
我已经创建了一个自定义列来执行此操作.它检查渲染器中的类型并确定要渲染的内容.
我已经使用下面的代码使"字符串"正常工作,但是我在如何动态创建和渲染列中更复杂的滑块控件方面苦苦挣扎.
这个简化的例子只是试图在其中呈现一个Panel日期控件,好像我可以做到这一点,我可以弄清楚滑块的其余部分.
Ext.define('MyApp.view.MyColumn', {
extend: 'Ext.grid.column.Column',
alias: ['widget.mycolumn'],
stringTemplate: new Ext.XTemplate('code to render {name} for string items'),
constructor: function(cfg){
var me = this;
me.callParent(arguments);
me.renderer = function(value, p, record) {
var data = Ext.apply({}, record.data, record.getAssociatedData());
if (data.type == "string") {
return me.renderStringFilter(data);
} else if (data.type == "double" || data.type == "integer") {
return me.renderNumericFilter(data);
} else {
log("Unknown data.type", data);
};
},
renderStringFilter: function(data) {
// this works great and does …Run Code Online (Sandbox Code Playgroud) 当使用mercurial时,我希望能够使用我的默认远程存储库中的tip文件来区分文件的工作副本.是否有捷径可寻?
我知道我可以做一个"hg incoming -p"来看看即将发生的补丁变更集,但是如果我直接看到特定文件的实际更改,我会很高兴.最新的东西(或者我可能会推出的东西).
我现在能想到的最简单的事情就是创建一个小脚本来查看.hg/hgrc中的默认位置并使用curl下载文件(如果它是通过http,否则scp通过ssh,或者只是做一个直接diff,如果它在本地文件系统上)然后将工作副本或提示与该临时副本区分开来.
我正在努力向我的团队出售mercurial,我的一个团队成员今天提出了这个问题,他们可以使用他们的GUI工具在SVN中轻松完成.
使用redis的,有一些命令来检索整个数据结构(LRANGE为列表,SMEMBERS对于套,ZRANGE为有序集合,和HGETALL为散列)。
仅散列具有使用单个命令插入多个项目的方法(HMSET)。
我所看到的所有示例都显示仅一次将一个项目添加到列表(通过RPUSH或LPUSH)或一组(通过SADD / ZADD)。
我要解决的更具体的问题是创建包含数据库ID的列表和排序集,这些列表对于每个用户都是唯一的,并且包含数百到几千个ID。
它们通常是从数据库查询中收集的,在内存中进行一些处理,然后存储在redis中,以通过(列表)进行分页或进行基于集合的操作以检索子集(集合和排序集合)。
当前,我正在遍历列表,并为每个元素调用适当的add方法。这样做的缺点是在网络上发出多个请求,每次都重复密钥。
redis> RPUSH employee:ids 1000
(integer) 1
redis> RPUSH employee:ids 1001
(integer) 2
redis> RPUSH employee:ids 1002
(integer) 3
redis> RPUSH employee:ids 1003
(integer) 4
redis> del employee:ids
(integer) 1
Run Code Online (Sandbox Code Playgroud)
我在想,使用带有MULTI和EXEC的事务可以将其转换为单个请求,但是对于重复的键却无济于事。
redis> MULTI
OK
redis> RPUSH employee:ids 1000
QUEUED
redis> RPUSH employee:ids 1001
QUEUED
redis> RPUSH employee:ids 1002
QUEUED …Run Code Online (Sandbox Code Playgroud) 当运行使用葡萄系统的脚本来获取ibiblio repo中的依赖关系时,它会失败直到我grape resolve从命令行手动调用.之后,它在本地缓存中,脚本运行正常.
是否有一些其他注释需要用来让它第一次从脚本中运行?告诉用户首先"葡萄解决",然后@Grab工作,感觉很奇怪.
这是脚本,抓住了redis的jedis jar:
#!/usr/bin/env groovy
@Grab('redis.clients:jedis:2.0.0')
import redis.clients.jedis.*
Jedis redis = new Jedis("localhost")
Run Code Online (Sandbox Code Playgroud)
如果我有一个干净的〜/ .groovy/grape缓存,则会因此异常而失败:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during conversion: Error grabbing Grapes -- [unresolved dependency: redis.clients#jedis;2.0.0: ibiblio: unable to get resource for redis/clients#jedis;2.0.0: res=/redis/clients/jedis/2.0.0/jedis-2.0.0.pom: java.net.MalformedURLException: no protocol: /redis/clients/jedis/2.0.0/jedis-2.0.0.pom]
Run Code Online (Sandbox Code Playgroud)
它只在我grape resolve从命令行手动执行后运行:
grape -V resolve redis.clients jedis 2.0.0
Run Code Online (Sandbox Code Playgroud)
(部分输出显示它是从ibiblio下载的):
...
ibiblio: found md file for redis.clients#jedis;2.0.0
=> http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom (2.0.0)
downloading http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom ...
ibiblio: downloading http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom
ibiblio: downloading http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom.sha1
sha1 OK …Run Code Online (Sandbox Code Playgroud) 我正在为.net SOAP服务创建一个Groovy客户端,它需要一个如下所示的soap标头:
<soap:Header>
<HeaderInfo xmlns="http://foo.bar.com/ns">
<token>abc-unique-token</token>
</HeaderInfo>
</soap:Header>
Run Code Online (Sandbox Code Playgroud)
我找到了为CXF消息添加标题的常见问题,它让我几乎到了那里,但并不完全.他们为选项4提供的示例如下所示:
List<Header> headers = new ArrayList<Header>()
Header header = new Header(new QName("http://foo.bar.com/ns", "HeaderInfo"),
"abc-unique-token", new JAXBDataBinding(String.class))
headers.add(header)
proxy.client.getRequestContext().put(Header.HEADER_LIST, headers)
Run Code Online (Sandbox Code Playgroud)
使用此代码,我可以这样做:
<soap:Header>
<HeaderInfo xmlns="http://foo.bar.com/ns">
abc-unique-token
</HeaderInfo>
</soap:Header>
Run Code Online (Sandbox Code Playgroud)
但是"HeaderInfo"节点缺少子"令牌"节点以包围"abc-unique-token",我不知道如何在那里获取它.
是否有一些简单的事情我可以传递给Header构造函数来创建该节点?
一篇单独的文章讨论了使用不同的技术,但是当我尝试使用它时,这会在SoapFactory周围抛出错误.
我发现的许多其他东西需要创建一些扩展AbstractPhaseInterceptor类的东西,带有一堆额外的代码,当我想要的是如此接近:).
在Swift中,您可以使用范围运算符获取一个数组,如下所示:
let list: String[] = ["first", "middle", "last"]
let cdr = list[1..list.endIndex]
assert(cdr == ["middle", "last"])
Run Code Online (Sandbox Code Playgroud)
我试图在一个带有String[]参数的递归函数中做同样的事情,但没有任何运气:
func last(xs: String[]) -> String? {
switch xs {
case let (singleItemList) where singleItemList.endIndex == 1:
return singleItemList[0]
case let(multiItemList) where multiItemList.endIndex > 1:
let cdr: String[] = multiItemList[1..multiItemList.endIndex] // compilation error!
return last(cdr)
default:
return nil // empty list
}
}
last(["first", "middle", "last"])
last(["last"])
last([])
Run Code Online (Sandbox Code Playgroud)
中间案例语句不编译.它失败并出现此错误:
Playground execution failed: error: <REPL>:14:29: error: could not find an overload for 'subscript' …Run Code Online (Sandbox Code Playgroud) groovy ×3
javascript ×2
mercurial ×2
swift ×2
cxf ×1
dependencies ×1
diff ×1
dynamic ×1
extjs ×1
gradle ×1
grails ×1
gridpanel ×1
groovyws ×1
gsp ×1
hadoop ×1
header ×1
http ×1
insert ×1
ivy ×1
jar ×1
jedis ×1
maven ×1
merge ×1
oop ×1
performance ×1
push ×1
redis ×1
ruby-grape ×1
scp ×1
sitemesh ×1
super ×1
svn ×1
templates ×1
web-services ×1