2012-12-12 2 views
1

Я конвертирую hglib-python в hglib-erlang. В файле test-diff.py, код питона выглядит следующим образом:исходный код, двоичный, список, продолжение строки

import common 

class test_diff(common.basetest): 
    def test_basic(self): 
     self.append('a', 'a\n') 
     self.client.add('a') 
     diff1 = """diff -r 000000000000 a 
--- /dev/null 
+++ b/a 
@@ -0,0 +1,1 @@ 
+a 
""" 
     self.assertEquals(diff1, self.client.diff(nodates=True)) 
     self.assertEquals(diff1, self.client.diff(['a'], nodates=True)) 
     rev0, node0 = self.client.commit('first') 
     diff2 = """diff -r 000000000000 -r %s a 
--- /dev/null 
+++ b/a 
@@ -0,0 +1,1 @@ 
+a 
""" % node0[:12] 
     self.assertEquals(diff2, self.client.diff(change=rev0, nodates=True)) 
     self.append('a', 'a\n') 
     rev1, node1 = self.client.commit('second') 
     diff3 = """diff -r %s a 
--- a/a 
+++ b/a 
@@ -1,1 +1,2 @@ 
a 
+a 
""" % node0[:12] 
     self.assertEquals(diff3, self.client.diff(revs=[rev0], nodates=True)) 
     diff4 = """diff -r %s -r %s a 
--- a/a 
+++ b/a 
@@ -1,1 +1,2 @@ 
a 
+a 
""" % (node0[:12], node1[:12]) 
     self.assertEquals(diff4, self.client.diff(revs=[rev0, rev1], nodates=True)) 

Для моего hglib-Erlang, первая функция преобразуется следующим образом:

diff_test_a()-> 
    teardown(push), 
    setup(push), 
    {ok,Pid} = emercurial_client:start_link('none','UTF-8','none',true), 
    append("a","a\n"), 
    true = emercurial_client:add(Pid,#add{files=['a']}), 
    Diff1 = 
     <<"diff -r 000000000000 a\n--- /dev/null\n+++ b/a\[email protected]@ -0,0 +1,1 @@\n+a\n">>, 
    Result = emercurial_client:diff(Pid,#diff{nodates=true}), 
    error_logger:info_report([client_tests_diff_test_1,Result]), 
    ?assertMatch(Diff1,Result). 

выше Diff1 матч линия слишком долго, что продолжение строки для erlang binary типа? Кроме того, как написать продолжение строки для erlang list типа? просто ++ операция?

ответ

4

Просто поместите несколько " незакрытых строк рядом друг с другом, с пробелами между ними. Это работает как для строк, так и для двоичных файлов:

1> <<"foo\n" 
    "bar">>. 
<<"foo\nbar">> 

2> "foo\n" 
    "bar". 
"foo\nbar" 

Строки/двоичные файлы объединены во время компиляции.

Смежные вопросы