这是一个非常深奥的问题,所以只是从头开始说清楚:我不是在谈论从svn转换为git,git转换为mercurial,或者mercurial转换为git.我说的是利用"跨系统"插件产生的一种复杂情况,这种插件允许Mercurial在某种程度上与git和SVN进行互操作.
有一段时间我使用了Mercurial的hg-subversion插件来"跟踪"code.google.com上的上游SVN存储库.感谢这个插件,Mercurial认为存储库是"相关的",并且能够提取自我上次从回购中提取以来发生的变化.这允许我维护我自己的私有Mercurial存储库,其中包括私有变更集,分支,标记等,但它会定期与上游SVN存储库中发生的更改同步并合并.
上游回购已经从SVN干净地移动到git.当我干净利落地说,我的意思是他们已经把整个提交树,或至少影响我关心的默认/主分支的部分.
我现在处于这样一种情况:我有一个Mercurial存储库,它最近与现已解散的SVN存储库中的最后一次签入合并,我想开始从新的上游git存储库中提取更改,从在svn存储库移动到github之后发生的更改.
我可以使用精彩的hg-git插件从这个存储库中提取更改,但由于当前存储库没有与git上游存储库"相关"的概念,它将提取所有更改,包括镜像更改集的所有更改已存在于我的存储库中.
所以我正在寻找的建议是如何让我的Mercurial存储库通过hg-git考虑自己,与上游git存储库相关,并且还考虑git存储库中所有适当的提交为"已经拉出"维持变更集平等的目的.
我看到内部的hg-git似乎使用了一个文件.hg/git-mapfile,我认为它可以映射上游git和本地Mercurial存储库之间的变更集.这可能是一个线索.
什么是让我的本地Mercurial存储库进入这样一种状态的最简单方法,它本质上就像它是作为上游git存储库的克隆而开始的,但是保留了我自己随时间添加的所有不相关的变更集?
(注意:我不希望用新的克隆"重新开始",然后应用我的私有更改,因为我想保持此存储库的历史完整性以用于我自己的构建/调试目的).
在Apple关于ARC的文档中,他们提出了一个有问题的场景,其中ARC将在幕后生成样板临时变量.搜索"编译器因此重写":
警告的要点似乎是因为基于堆栈的变量是"强"并且被调用方法的by-reference参数(performOperationWithError :)是自动释放的,ARC将生成一个临时局部变量来满足内存管理需求自动释放变量.但是因为临时变量被分配给样板示例中的强变量,所以从客户的角度来看似乎没有风险.
究竟是什么文件在这里向我们发出警告?作为客户端或可以以这种方式调用的方法的实现者(具有自动释放的,按值返回参数)的风险是什么?
在Mac OS X上,DYLD格式的二进制可执行文件包含"加载程序命令",用于指示库加载系统如何处理文件的内容.特别是,loader命令指示系统应该搜索依赖库,等等.
您可以通过运行"otool -l/path/to/your/app"查看系统上任何二进制文件的加载程序命令的完整列表.
一般来说,这些加载器命令是在项目编译的链接阶段由"ld"工具设置的.
我的问题是,我需要做什么才能为ld不支持(显然)的公开类型添加加载程序命令?
特别是,我想利用LC_DYLD_ENVIRONMENT加载器命令,该命令可用于在二进制文件的加载程序命令表中指定一个字符串,该字符串应加载并在可执行文件的上下文中作为环境变量设置进行评估.
我没有看到任何有助于此的论点.像"-sectcreate"这样的东西,但是为了特别添加到加载器命令的内容,就是我所追求的.
我知道这是可能的,因为Mac OS X上至少有一个标准应用程序使用它:Safari.但我不知道他们是否通过对二进制文件进行某种后链接按摩来实现这一点,如果他们使用自定义版本的ld知道如何构建和链接自定义加载器命令,或者他们是否正在利用ld命令的一般purpopse功能,我一直无法弄清楚.
经过一些仔细的调试,我发现我的应用程序中存在一个错误,该错误植根于系统框架中,加载了一个有问题的Apple软件包:
/System/Library/CoreServices/MLTEFile.bundle
Run Code Online (Sandbox Code Playgroud)
我相信我没有从这个捆绑的服务中受益,并且怀疑很多应用程序都是.事实上,我通过研究Xcode本身学到了捆绑不能加载到Xcode的内存空间,因为捆绑包不兼容垃圾收集.
理想情况下,我想阻止此捆绑包加载到我的应用程序中.这样做的一种方法是在我自己的应用程序中要求GC,但我不打算这样做.任何人都可以想办法绕过系统框架调用dlopen()这个库的尝试吗?
由于我的应用程序中某些NSTextView附件的语义,我想知道它们何时从我的文本存储中插入或删除.
我的NSTextView子类实现了shouldChangeTextInRange:replacementString:方法,它允许我轻松查看附件何时被替换(我可以在指定范围内搜索文本存储).
因为替换字符串只是NSString而不是NSAttributedString,所以我无法从此方法中看到是否正在插入附件.文档甚至可以说,如果正在编辑"仅属性",则字符串可能为nil.
所以问题是,在插入附件时最好的覆盖点是什么?或者也许有用:什么是最好的覆盖点,以查看何时修改属性?
更新:我上面说过,我无法知道是否插入了附件.我向我指出,我可以告诉我涉及"一个"附件,因为该字符串将包含神奇的NSAttachmentCharacter.但在编辑完成之前,我将不会提供有关附件的具体信息.
WebView通过WebEditingDelegate一种机制,支持代理为WebView(或私有WebHTMLView)接收的各种动作实现自定义行为.当一个动作,如:
-(void)changeAttributes:(id)sender
Run Code Online (Sandbox Code Playgroud)
收到后WebHTMLView,它被传递给委托方法:
-(BOOL)webView:(WebView *)webView doCommandBySelector:(SEL)command
Run Code Online (Sandbox Code Playgroud)
不幸的是,该机制没有规定sender在原始行动方法中传送" ".
对于绝大多数动作,发送者并不重要,但是对于changeAttributes和changeFont,例如,合同要求sender接收者调用" "以便例如convertAttributes:或者convertFont:.
对于这种changeFont情况,事实证明,呼叫[[NSFontManager sharedFontManager] convertFont:]是足够的,因为巧合的是这是发送者.
在这种changeAttributes情况下,特别是当删除线被改变时,发送者可以是私人类" NSFontEffectsBox",其可能对应于负责改变删除线/等设置的字体面板的子部分.
不幸的是,调用[[NSFontManager sharedFontManager] convertAttributes:]不会获得预期的属性更改.这使得有兴趣有意义地实现这种方法的代表有点困惑:
WebKit不传达发件人,因此代表不能进行合同[sender convertAttributes:]调用.
该changeAttributes:调用被发送到私有WebKit类,该类WebHTMLView不能被子类化,例如,自定义其行为changeAttributes:.
changeAttributes:呼叫的发送方NSFontEffectsBox是私有类,不能访问,例如[NSFontEffectsBox sharedFontEffectsBox].
简而言之:似乎有没有办法一个开发商有意义重写的行为changeAttributes:的WebView.
有任何想法吗?
cocoa ×4
macos ×3
dyld ×2
darwin ×1
dlopen ×1
fonts ×1
git ×1
hg-git ×1
hgsubversion ×1
ios ×1
mercurial ×1
nstextview ×1
objective-c ×1
webkit ×1
xcode ×1