- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
%% 问题已解决,下面的代码按预期运行 %%
我正在尝试在 Bash 中编写一个 SVN 预提交 Hook ,用于测试传入文件的 UTF-8 编码。经过大量字符串处理来获取传入文件的路径并忽略目录/图片/删除的文件等,我使用“svnlook cat”来读取传入文件并将其通过管道传输到“iconv -f UTF-8”。之后,我使用 ${PIPESTATUS[1]} 读取 iconv 操作的退出状态。
我的代码如下所示:
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
ICONV=/usr/bin/iconv
# The file endings to ignore when checking for UTF-8:
IGNORED_ENDINGS=( png jar )
# Prepairing to set the IFS (Internal Field Separator) so "for CHANGE in ..." will iterate
# over lines instead of words
OIFS="${IFS}"
NIFS=$'\n'
# Make sure that all files to be committed are encoded in UTF-8
IFS="${NIFS}"
for CHANGE in $($SVNLOOK changed -t "$TXN" "$REPOS"); do
IFS="${OIFS}"
# Skip change if first character is "D" (we dont care about checking deleted files)
if [ "${CHANGE:0:1}" == "D" ]; then
continue
fi
# Skip change if it is a directory (directories don't have encoding)
if [ "${CHANGE:(-1)}" == "/" ]; then
continue
fi
# Extract file repository path (remove first 4 characters)
FILEPATH=${CHANGE:4:(${#CHANGE}-4)}
# Ignore files that starts with "." like ".classpath"
IFS="//" # Change seperator to "/" so we can find the file in the file path
for SPLIT in $FILEPATH
do
FILE=$SPLIT
done
if [ "${FILE:0:1}" == "." ]; then
continue
fi
IFS="${OIFS}" # Reset Internal Field Seperator
# Ignore files that are not supposed to be checked, like images. (list defined in IGNORED_ENDINGS field above)
IFS="." # Change seperator to "." so we can find the file ending
for SPLIT in $FILE
do
ENDING=$SPLIT
done
IFS="${OIFS}" # Reset Internal Field Seperator
IGNORE="0"
for IGNORED_ENDING in ${IGNORED_ENDINGS[@]}
do
if [ `echo $IGNORED_ENDING | tr [:upper:] [:lower:]` == `echo $ENDING | tr [:upper:] [:lower:]` ] # case insensitive compare of strings
then
IGNORE="1"
fi
done
if [ "$IGNORE" == "1" ]; then
continue
fi
# Read changed file and pipe it to iconv to parse it as UTF-8
$SVNLOOK cat -t "$TXN" "$REPOS" "$FILEPATH" | $ICONV -f UTF-8 -t UTF-16 -o /dev/null
# If iconv exited with a non-zero value (error) then return error text and reject commit
if [ "${PIPESTATUS[1]}" != "0" ]; then
echo "Only UTF-8 files can be committed (violated in $FILEPATH)" 1>&2
exit 1
fi
IFS="${NIFS}"
done
IFS="${OIFS}"
# All checks passed, so allow the commit.
exit 0
问题是,每次我尝试提交包含“æøå”等斯堪的纳维亚字符的文件时 iconv 都会返回错误(退出 1)。
如果我禁用脚本,使用“æøå”提交文件,将“svnlook -t”和“svnlook cat -t”中的-t(事务)更改为-r(修订版),并使用“æøå”文件的修订号手动运行脚本,然后 iconv (以及脚本)返回退出 0。一切都很顺利。
为什么 svnlook cat -r 按预期工作(返回 UTF-8 编码的“æøå”字符串),但 svnlook cat -t 不工作?
最佳答案
问题在于,如果未选择输出编码,则 iconv 显然会出现意外行为。
改变
$SVNLOOK cat -t "$TXN" "$REPOS" "$FILEPATH" | $ICONV -f UTF-8 -o /dev/null
至
$SVNLOOK cat -t "$TXN" "$REPOS" "$FILEPATH" | $ICONV -f UTF-8 -t UTF-16 -o /dev/null
解决了问题,并使脚本按预期运行:)
关于linux - 为什么从 SVN 事务读取而不是从 SVN 修订版读取时 iconv 退出并出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8430925/
官方镜像下载实在是慢,于是开通了阿里云开发者帐号, 阿里的文档是错误的, 复制代码 代码如下: sudo sed -i "s|ExecStart=/usr/
我有一个gradle buildscript。在此脚本中,我设置了一些出版物。 在脚本的后面,我有一个任务,该任务从文件读取Buildnumber并增加它。比项目的版本将被更改。 现在我的问题是:可以
下面的代码是我用来添加到数据库中已创建的表的代码。我仍然收到查询错误,错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行 'Location, Horse
三角形应该是这样的 1 11 111 1111 11111 111111 行数由用户输入,然后转化为函数注意:没有数组,必须有一个循环(while或for),不能嵌套循环 我得到的最接近的是一个有 2
我的代码 idxcell{:,1} 对于 1:10 迭代给出了以下结果: ans = 9 10 14 15 19 20 24 25
当您这样做时hg log在文件上,仅列出发生更改的修订。我想看看目录中所有文件的最新修订版是什么。 (在文件级别而不是行级别考虑 hg blame。) 我还以为hg log -l 1 *可能有用,但它
我知道,这个话题已经有据可查 here .但我找不到正确的答案。 几年前,我们的老板对一个同事说,他必须把ALL放到SVN里。他做了几次,总而言之,大约是 7.2 演出 .这现在已经完全过时了,必须从
我正在制作一个 twitter 客户端,并且正在评估保护用户登录信息的各种方法。 重要提示:我需要保护用户的数据免受其他应用程序的影响。例如,想象一下如果机器人开始从用户桌面上运行的应用程序中窃取 T
我想知道这些词是否彼此同义? 最佳答案 是的,它们是大多数用途的等效术语。 当您获得“变更集” 5100或“修订” 5100时,您正在讨论的是同一件事。从技术上讲,变更集是其中包含的更改(与大多数源代
我们的项目中有几个远程子存储库,它们的地址最近从 http://host/path 移到了至 http://other_host/path .怎么能回到上个月的修订版,Mercurial 认为可以在
我想 checkout Subversion 中文件夹的特定修订版使用命令行。 我在 TortoiseProc.exe 中没有看到用于指定修订版本号的选项, TortoiseProc.exe /com
如何更改 r0 ,使其看起来像我在创建存储库时添加了 .hgignore 或在当前的 r0 之前插入提交? 我刚刚使用 hgsvn 将一个巨大的 SVN 存储库转换为 Mercurial。花了几个小时
据我所知,CouchDB 修订版不应被视为文档版本控制意义上的修订版。从其他帖子来看,它们似乎被视为临时数据,直到调用粗粒度的紧凑操作为止。 我的问题是,如果我有兴趣使用 CouchDB 来维护文档以
我想从存储库中删除最后一个修订版(或最后 n 个修订版)。 怎么做? 是否可以从 project/db/revs/ 和 project/db/revprops/ 中删除 svn 修订文件? 最佳答案
如何(如果可能的话)在文件中搜索字符串(包括其所有修订版本)? 这样做的原因是我知道某些字符串过去曾在我的文件 foo.bar 中的某个地方,但后来被删除了。该文件有很多修订,因此手动搜索非常耗时。我
我的 PC (Windows Server 2012) 上安装了 TortoiseSVN 1.8.7 + VisualSVN Server 2.7.7。最近我的同事告诉我,当他尝试更新时,在对话框列出
我用一个简单的水平“nowrap”css 编写了一个站点,其中 img 并排 float 。我也隐藏了滚动条。 侧滚可以通过正常的垂直鼠标滚轮滚动来完成(见我的元素网址 因为图像都是 1400x850
我想弄清楚为什么有人删除了 bzr 存储库中的文件。我知道它以前在那里,但现在它不见了。从那时起已经有数百次提交。没有人愿意逐一阅读。我只是想找到文件被删除时的修订号,以找出它被删除的原因。 bzr
我喜欢做的一件常见事情是将我的工作副本恢复到特定的修订版,进行一些测试,然后将其带回我当前的主人的头上。过去我天真地做了一个“git checkout hash”只是为了失去理智。从那以后,我了解到我
我刚刚开始研究 Alembic,来自 Django,我们有 South迁移我们的数据库模式(包括 soon),它使用友好的旧固定宽度数字,如 0037_fix_my_schema.py谈到应用迁移的顺
我是一名优秀的程序员,十分优秀!