tor-commits
  Threads by month 
                
            - ----- 2025 -----
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2024 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2023 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2022 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2021 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2020 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2019 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2018 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2017 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2016 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2015 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2014 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2013 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2012 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2011 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 
November 2019
- 20 participants
 - 2924 discussions
 
                        
                            
                                
                            
                            [translation/support-portal_completed] https://gitweb.torproject.org/translation.git/commit/?h=support-portal_completed
                        
                        
by translation@torproject.org 14 Nov '19
                    by translation@torproject.org 14 Nov '19
14 Nov '19
                    
                        commit 52a010ab376bae8fd244327bc4c19affa7adeb89
Author: Translation commit bot <translation(a)torproject.org>
Date:   Thu Nov 14 15:27:00 2019 +0000
    https://gitweb.torproject.org/translation.git/commit/?h=support-portal_comp…
---
 contents.pot | 17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)
diff --git a/contents.pot b/contents.pot
index 28c74eaaa..a9d01d9b9 100644
--- a/contents.pot
+++ b/contents.pot
@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: en <LL(a)li.org>\n"
@@ -1441,16 +1441,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr "<<<<<<< HEAD"
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr "======="
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr "#### Workaround (using a public key)"
 
@@ -1480,11 +1470,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [translation/support-portal] https://gitweb.torproject.org/translation.git/commit/?h=support-portal
                        
                        
by translation@torproject.org 14 Nov '19
                    by translation@torproject.org 14 Nov '19
14 Nov '19
                    
                        commit 2e168a68f7ae60dcd8ccd830493d157d7baaf021
Author: Translation commit bot <translation(a)torproject.org>
Date:   Thu Nov 14 15:26:51 2019 +0000
    https://gitweb.torproject.org/translation.git/commit/?h=support-portal
---
 contents+ar.po    | 17 +----------------
 contents+bn.po    | 17 +----------------
 contents+ca.po    | 17 +----------------
 contents+cs.po    | 17 +----------------
 contents+da.po    | 17 +----------------
 contents+de.po    | 17 +----------------
 contents+el.po    | 17 +----------------
 contents+es-AR.po | 17 +----------------
 contents+es.po    | 22 +++-------------------
 contents+fa.po    | 17 +----------------
 contents+fo.po    | 17 +----------------
 contents+fr.po    | 21 +++------------------
 contents+ga.po    | 17 +----------------
 contents+gu.po    | 17 +----------------
 contents+he.po    | 17 +----------------
 contents+hi.po    | 17 +----------------
 contents+hu.po    | 17 +----------------
 contents+id.po    | 17 +----------------
 contents+is.po    | 17 +----------------
 contents+it.po    | 17 +----------------
 contents+ja.po    | 17 +----------------
 contents+ka.po    | 17 +----------------
 contents+ko.po    | 17 +----------------
 contents+mk.po    | 17 +----------------
 contents+ml.po    | 17 +----------------
 contents+my.po    | 17 +----------------
 contents+nb.po    | 17 +----------------
 contents+nl.po    | 17 +----------------
 contents+pl.po    | 17 +----------------
 contents+pt-BR.po | 17 +----------------
 contents+pt-PT.po | 17 +----------------
 contents+ro.po    | 17 +----------------
 contents+ru.po    | 21 +++------------------
 contents+sr.po    | 17 +----------------
 contents+sv.po    | 17 +----------------
 contents+sw.po    | 17 +----------------
 contents+th.po    | 17 +----------------
 contents+tr.po    | 17 +----------------
 contents+uk.po    | 17 +----------------
 contents+zh-CN.po | 19 ++-----------------
 contents+zh-TW.po | 21 +++------------------
 contents.pot      | 17 +----------------
 42 files changed, 51 insertions(+), 682 deletions(-)
diff --git a/contents+ar.po b/contents+ar.po
index 4ea050a79..1bc859b82 100644
--- a/contents+ar.po
+++ b/contents+ar.po
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Arabic (https://www.transifex.com/otf/teams/1519/ar/)\n"
@@ -1219,16 +1219,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1251,11 +1241,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+bn.po b/contents+bn.po
index 878e7e86a..5b9957062 100644
--- a/contents+bn.po
+++ b/contents+bn.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Bengali (https://www.transifex.com/otf/teams/1519/bn/)\n"
@@ -1264,16 +1264,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1299,11 +1289,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+ca.po b/contents+ca.po
index e5b461cd4..01f298044 100644
--- a/contents+ca.po
+++ b/contents+ca.po
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Catalan (https://www.transifex.com/otf/teams/1519/ca/)\n"
@@ -1383,16 +1383,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1418,11 +1408,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+cs.po b/contents+cs.po
index 7b8f5fefe..e90d70910 100644
--- a/contents+cs.po
+++ b/contents+cs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Michal Stanke <mstanke(a)mozilla.cz>, 2019\n"
 "Language-Team: Czech (https://www.transifex.com/otf/teams/1519/cs/)\n"
@@ -1237,16 +1237,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1269,11 +1259,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+da.po b/contents+da.po
index 31470cc84..3d4ee955e 100644
--- a/contents+da.po
+++ b/contents+da.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: scootergrisen, 2019\n"
 "Language-Team: Danish (https://www.transifex.com/otf/teams/1519/da/)\n"
@@ -1213,16 +1213,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1245,11 +1235,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+de.po b/contents+de.po
index 61dc451ff..758245abe 100644
--- a/contents+de.po
+++ b/contents+de.po
@@ -14,7 +14,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: German (https://www.transifex.com/otf/teams/1519/de/)\n"
@@ -1324,16 +1324,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1359,11 +1349,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+el.po b/contents+el.po
index 233fb8fa2..75d803347 100644
--- a/contents+el.po
+++ b/contents+el.po
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Greek (https://www.transifex.com/otf/teams/1519/el/)\n"
@@ -1253,16 +1253,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1285,11 +1275,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+es-AR.po b/contents+es-AR.po
index 470d3cba6..109dba6bc 100644
--- a/contents+es-AR.po
+++ b/contents+es-AR.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Zuhualime Akoochimoya, 2019\n"
 "Language-Team: Spanish (Argentina) (https://www.transifex.com/otf/teams/1519/es_AR/)\n"
@@ -1233,16 +1233,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1265,11 +1255,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+es.po b/contents+es.po
index ffc43ec4d..4b2691b43 100644
--- a/contents+es.po
+++ b/contents+es.po
@@ -2,16 +2,16 @@
 # Zuhualime Akoochimoya, 2019
 # strel, 2019
 # David Figuera <dfb(a)fastmail.com>, 2019
+# erinm, 2019
 # eulalio barbero espinosa <eulaliob(a)gmail.com>, 2019
 # Nicolas Sera-Leyva <nseraleyva(a)internews.org>, 2019
-# erinm, 2019
 # Emma Peel, 2019
 # 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Spanish (https://www.transifex.com/otf/teams/1519/es/)\n"
@@ -1460,16 +1460,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr "======="
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1495,11 +1485,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
@@ -9069,8 +9054,7 @@ msgid ""
 "to contact them."
 msgstr ""
 "Si deseas charlar con alguien en concreto, comienza la frase con su apodo, "
-"así esa persona recibirá una notificación de que alguien intenta entablar un"
-" dialogo con el/ella."
+"así esa persona recibirá una notificación de que alguien intenta hablarle."
 
 #: https//support.torproject.org/get-in-touch/irc-help/
 #: (content/get-in-touch/irc-help/contents+en.lrquestion.description)
diff --git a/contents+fa.po b/contents+fa.po
index e4890d754..b2da18771 100644
--- a/contents+fa.po
+++ b/contents+fa.po
@@ -15,7 +15,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Reza Ghasemi, 2019\n"
 "Language-Team: Persian (https://www.transifex.com/otf/teams/1519/fa/)\n"
@@ -1247,16 +1247,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1279,11 +1269,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+fo.po b/contents+fo.po
index 7b4d08a65..aa8d76d14 100644
--- a/contents+fo.po
+++ b/contents+fo.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: erinm, 2019\n"
 "Language-Team: Faroese (https://www.transifex.com/otf/teams/1519/fo/)\n"
@@ -1227,16 +1227,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1259,11 +1249,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+fr.po b/contents+fr.po
index eabff73fc..f4018bd3d 100644
--- a/contents+fr.po
+++ b/contents+fr.po
@@ -2,19 +2,19 @@
 # Curtis Baltimore <curtisbaltimore(a)protonmail.com>, 2019
 # David Georges, 2019
 # N W, 2019
+# erinm, 2019
 # Emma Peel, 2019
 # PoorPockets McNewHold <poorpocketsmcnewhold(a)protonmail.ch>, 2019
 # AO <ao(a)localizationlab.org>, 2019
 # Adam Lynn <adam(a)opentechfund.org>, 2019
-# erinm, 2019
 # 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
-"Last-Translator: erinm, 2019\n"
+"Last-Translator: Adam Lynn <adam(a)opentechfund.org>, 2019\n"
 "Language-Team: French (https://www.transifex.com/otf/teams/1519/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -1322,16 +1322,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr "======="
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1354,11 +1344,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+ga.po b/contents+ga.po
index 8c61ccde6..191b38012 100644
--- a/contents+ga.po
+++ b/contents+ga.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Irish (https://www.transifex.com/otf/teams/1519/ga/)\n"
@@ -1229,16 +1229,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1261,11 +1251,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+gu.po b/contents+gu.po
index e33f5231b..16f309291 100644
--- a/contents+gu.po
+++ b/contents+gu.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: erinm, 2019\n"
 "Language-Team: Gujarati (https://www.transifex.com/otf/teams/1519/gu/)\n"
@@ -1215,16 +1215,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1247,11 +1237,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+he.po b/contents+he.po
index 5a7554ff2..b9c32c5dc 100644
--- a/contents+he.po
+++ b/contents+he.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: ION, 2019\n"
 "Language-Team: Hebrew (https://www.transifex.com/otf/teams/1519/he/)\n"
@@ -1218,16 +1218,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1250,11 +1240,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+hi.po b/contents+hi.po
index 23bb069a6..786f01b50 100644
--- a/contents+hi.po
+++ b/contents+hi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: erinm, 2019\n"
 "Language-Team: Hindi (https://www.transifex.com/otf/teams/1519/hi/)\n"
@@ -1213,16 +1213,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1245,11 +1235,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+hu.po b/contents+hu.po
index 1dd93ba13..00a1d706b 100644
--- a/contents+hu.po
+++ b/contents+hu.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: vargaviktor <viktor.varga(a)gmail.com>, 2019\n"
 "Language-Team: Hungarian (https://www.transifex.com/otf/teams/1519/hu/)\n"
@@ -1225,16 +1225,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1257,11 +1247,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+id.po b/contents+id.po
index c60afea6d..94328ace6 100644
--- a/contents+id.po
+++ b/contents+id.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Indonesian (https://www.transifex.com/otf/teams/1519/id/)\n"
@@ -1248,16 +1248,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1283,11 +1273,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+is.po b/contents+is.po
index d309fbc30..2758953c9 100644
--- a/contents+is.po
+++ b/contents+is.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Sveinn í Felli <sv1(a)fellsnet.is>, 2019\n"
 "Language-Team: Icelandic (https://www.transifex.com/otf/teams/1519/is/)\n"
@@ -1261,16 +1261,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1293,11 +1283,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+it.po b/contents+it.po
index 8eef9f9e3..1543ee49d 100644
--- a/contents+it.po
+++ b/contents+it.po
@@ -20,7 +20,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Italian (https://www.transifex.com/otf/teams/1519/it/)\n"
@@ -1463,16 +1463,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr "#### Soluzione alternativa (utilizzando una chiave pubblica)"
 
@@ -1502,11 +1492,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+ja.po b/contents+ja.po
index 5c912973b..7939d0183 100644
--- a/contents+ja.po
+++ b/contents+ja.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: ue zaeco, 2019\n"
 "Language-Team: Japanese (https://www.transifex.com/otf/teams/1519/ja/)\n"
@@ -1218,16 +1218,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1250,11 +1240,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+ka.po b/contents+ka.po
index 8c7d4ab82..43ddec061 100644
--- a/contents+ka.po
+++ b/contents+ka.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Georgianization, 2019\n"
 "Language-Team: Georgian (https://www.transifex.com/otf/teams/1519/ka/)\n"
@@ -1457,16 +1457,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr "#### დროებითი გამოსავალი (საჯარო გასაღებით)"
 
@@ -1497,11 +1487,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+ko.po b/contents+ko.po
index c1b18c456..89e6c34a7 100644
--- a/contents+ko.po
+++ b/contents+ko.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Johnny Cho <popeye92(a)gmail.com>, 2019\n"
 "Language-Team: Korean (https://www.transifex.com/otf/teams/1519/ko/)\n"
@@ -1218,16 +1218,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1250,11 +1240,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+mk.po b/contents+mk.po
index 3bcbf6957..f2265cb55 100644
--- a/contents+mk.po
+++ b/contents+mk.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Liljana Ackovska <liljanagjurova(a)gmail.com>, 2019\n"
 "Language-Team: Macedonian (https://www.transifex.com/otf/teams/1519/mk/)\n"
@@ -1217,16 +1217,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1249,11 +1239,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+ml.po b/contents+ml.po
index a8954d3aa..0b2486f8c 100644
--- a/contents+ml.po
+++ b/contents+ml.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Malayalam (https://www.transifex.com/otf/teams/1519/ml/)\n"
@@ -1473,16 +1473,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr "#### Workaround (ഒരു പൊതു കീ ഉപയോഗിച്ച്)"
 
@@ -1512,11 +1502,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+my.po b/contents+my.po
index 5046dac7a..9d6f7c8ee 100644
--- a/contents+my.po
+++ b/contents+my.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: erinm, 2019\n"
 "Language-Team: Burmese (https://www.transifex.com/otf/teams/1519/my/)\n"
@@ -1213,16 +1213,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1245,11 +1235,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+nb.po b/contents+nb.po
index deb095737..4305d614e 100644
--- a/contents+nb.po
+++ b/contents+nb.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: 490cdfb601cecc09e36402222ad5913c, 2019\n"
 "Language-Team: Norwegian Bokmål (https://www.transifex.com/otf/teams/1519/nb/)\n"
@@ -1228,16 +1228,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1260,11 +1250,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+nl.po b/contents+nl.po
index 86e18e8cc..ae658ff88 100644
--- a/contents+nl.po
+++ b/contents+nl.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Meteor 0id, 2019\n"
 "Language-Team: Dutch (https://www.transifex.com/otf/teams/1519/nl/)\n"
@@ -1229,16 +1229,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1261,11 +1251,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+pl.po b/contents+pl.po
index e68562b87..24a7b0451 100644
--- a/contents+pl.po
+++ b/contents+pl.po
@@ -14,7 +14,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Michał Nowak <nowak1michal(a)gmail.com>, 2019\n"
 "Language-Team: Polish (https://www.transifex.com/otf/teams/1519/pl/)\n"
@@ -1275,16 +1275,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1307,11 +1297,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+pt-BR.po b/contents+pt-BR.po
index aaffc2913..19a69e765 100644
--- a/contents+pt-BR.po
+++ b/contents+pt-BR.po
@@ -18,7 +18,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: m tk, 2019\n"
 "Language-Team: Portuguese (Brazil) (https://www.transifex.com/otf/teams/1519/pt_BR/)\n"
@@ -1413,16 +1413,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1445,11 +1435,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+pt-PT.po b/contents+pt-PT.po
index 13e760f1b..04205e9a9 100644
--- a/contents+pt-PT.po
+++ b/contents+pt-PT.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Rui Melo <viper5000pt(a)gmail.com>, 2019\n"
 "Language-Team: Portuguese (Portugal) (https://www.transifex.com/otf/teams/1519/pt_PT/)\n"
@@ -1270,16 +1270,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1302,11 +1292,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+ro.po b/contents+ro.po
index d93a7dd0c..05df309a0 100644
--- a/contents+ro.po
+++ b/contents+ro.po
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: eduard pintilie <eduard.pintilie(a)gmail.com>, 2019\n"
 "Language-Team: Romanian (https://www.transifex.com/otf/teams/1519/ro/)\n"
@@ -1258,16 +1258,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1290,11 +1280,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+ru.po b/contents+ru.po
index 34077080c..ec2f02d54 100644
--- a/contents+ru.po
+++ b/contents+ru.po
@@ -9,18 +9,18 @@
 # Vitaliy Grishenko, 2019
 # Evgeny Malyshev <evgeny.malyshev.sss(a)gmail.com>, 2019
 # Andrey Kostrikov <yavinav(a)gmail.com>, 2019
+# erinm, 2019
 # solokot <solokot(a)gmail.com>, 2019
 # Sergey Smirnov <cj75300(a)gmail.com>, 2019
 # Мария Романенко <mary.romanenko(a)gmail.com>, 2019
-# erinm, 2019
 # 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
-"Last-Translator: erinm, 2019\n"
+"Last-Translator: Мария Романенко <mary.romanenko(a)gmail.com>, 2019\n"
 "Language-Team: Russian (https://www.transifex.com/otf/teams/1519/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -1258,16 +1258,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr "======="
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1290,11 +1280,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+sr.po b/contents+sr.po
index d44ad6ead..5c501ba44 100644
--- a/contents+sr.po
+++ b/contents+sr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Aleksa Ristić, 2019\n"
 "Language-Team: Serbian (https://www.transifex.com/otf/teams/1519/sr/)\n"
@@ -1218,16 +1218,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1250,11 +1240,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+sv.po b/contents+sv.po
index 9d62654fd..a5bcfccc7 100644
--- a/contents+sv.po
+++ b/contents+sv.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Jonatan Nyberg, 2019\n"
 "Language-Team: Swedish (https://www.transifex.com/otf/teams/1519/sv/)\n"
@@ -1218,16 +1218,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1250,11 +1240,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+sw.po b/contents+sw.po
index a0e73489b..477fdaa51 100644
--- a/contents+sw.po
+++ b/contents+sw.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: erinm, 2019\n"
 "Language-Team: Swahili (https://www.transifex.com/otf/teams/1519/sw/)\n"
@@ -1213,16 +1213,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1245,11 +1235,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+th.po b/contents+th.po
index 05de22d6c..abe2b0b86 100644
--- a/contents+th.po
+++ b/contents+th.po
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: DN DN <deen6(a)protonmail.com>, 2019\n"
 "Language-Team: Thai (https://www.transifex.com/otf/teams/1519/th/)\n"
@@ -1221,16 +1221,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1253,11 +1243,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+tr.po b/contents+tr.po
index 6fdfcaee7..f915ae9b9 100644
--- a/contents+tr.po
+++ b/contents+tr.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Turkish (https://www.transifex.com/otf/teams/1519/tr/)\n"
@@ -1468,16 +1468,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr "#### Çözüm (herkese açık bir anahtar kullanarak)"
 
@@ -1507,11 +1497,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+uk.po b/contents+uk.po
index 126a982d5..8d3cd8823 100644
--- a/contents+uk.po
+++ b/contents+uk.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: nobik <nobikik9(a)gmail.com>, 2019\n"
 "Language-Team: Ukrainian (https://www.transifex.com/otf/teams/1519/uk/)\n"
@@ -1219,16 +1219,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1251,11 +1241,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+zh-CN.po b/contents+zh-CN.po
index f4c7da678..d239589c6 100644
--- a/contents+zh-CN.po
+++ b/contents+zh-CN.po
@@ -7,17 +7,17 @@
 # AngelFalse, 2019
 # MD Rights <psychi2009(a)gmail.com>, 2019
 # Cloud P <heige.pcloud(a)outlook.com>, 2019
+# erinm, 2019
 # ff98sha, 2019
 # YFdyh000 <yfdyh000(a)gmail.com>, 2019
 # shenzhui007 <12231252(a)bjtu.edu.cn>, 2019
-# erinm, 2019
 # Emma Peel, 2019
 # 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
 "Last-Translator: Emma Peel, 2019\n"
 "Language-Team: Chinese (China) (https://www.transifex.com/otf/teams/1519/zh_CN/)\n"
@@ -1264,16 +1264,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr "======="
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1299,11 +1289,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents+zh-TW.po b/contents+zh-TW.po
index 3f90b38c8..b613bb851 100644
--- a/contents+zh-TW.po
+++ b/contents+zh-TW.po
@@ -1,18 +1,18 @@
 # Translators:
 # Emma Peel, 2019
+# erinm, 2019
 # 孟邦 王, 2019
 # Bryce Tsao <tsaodingtw(a)gmail.com>, 2019
 # 男孩不壞, 2019
 # ian chou <ertiach(a)hotmail.com>, 2019
-# erinm, 2019
 # 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: 2018-10-02 22:41+0000\n"
-"Last-Translator: erinm, 2019\n"
+"Last-Translator: ian chou <ertiach(a)hotmail.com>, 2019\n"
 "Language-Team: Chinese (Taiwan) (https://www.transifex.com/otf/teams/1519/zh_TW/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -1216,16 +1216,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr "======="
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr ""
 
@@ -1248,11 +1238,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ""
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
diff --git a/contents.pot b/contents.pot
index 28c74eaaa..a9d01d9b9 100644
--- a/contents.pot
+++ b/contents.pot
@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-14 13:20+CET\n"
+"POT-Creation-Date: 2019-11-14 16:04+CET\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: en <LL(a)li.org>\n"
@@ -1441,16 +1441,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "<<<<<<< HEAD"
-msgstr "<<<<<<< HEAD"
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid "======="
-msgstr "======="
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid "#### Workaround (using a public key)"
 msgstr "#### Workaround (using a public key)"
 
@@ -1480,11 +1470,6 @@ msgstr ""
 
 #: https//support.torproject.org/tbb/how-to-verify-signature/
 #: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
-msgid ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-msgstr ">>>>>>> 4c7b199efc403f7f73b9ae06733568f8945eb6ae"
-
-#: https//support.torproject.org/tbb/how-to-verify-signature/
-#: (content/tbb/how-to-verify-signature/contents+en.lrquestion.description)
 msgid ""
 "You may also want to [learn more about "
 "GnuPG](https://www.gnupg.org/documentation/)."
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                        commit 3df64320067625e1ce888b9bd11943524ee8f47d
Author: teor <teor(a)torproject.org>
Date:   Tue Nov 12 15:07:27 2019 +1000
    test/parseconf: Add an expected_log file
    
    The "expected_log" file is a set of patterns that matches the
    output of "tor --verify-config". Unlike "error", it expects a
    successful exit status.
    
    Part of 32451.
---
 src/test/test_parseconf.sh | 79 +++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 67 insertions(+), 12 deletions(-)
diff --git a/src/test/test_parseconf.sh b/src/test/test_parseconf.sh
index 2f1f1ed35..f298072c3 100755
--- a/src/test/test_parseconf.sh
+++ b/src/test/test_parseconf.sh
@@ -8,11 +8,16 @@
 # Valid configurations are tested with --dump-config, which parses and
 # validates the configuration before writing it out.  We then make sure that
 # the result is what we expect, before parsing and dumping it again to make
-# sure that there is no change.
+# sure that there is no change. Optionally, we can also test the log messages
+# with --verify-config.
 #
 # Invalid configurations are tested with --verify-config, which parses
 # and validates the configuration. We capture its output and make sure that
 # it contains the error message we expect.
+#
+# When tor is compiled with different libraries or modules, some
+# configurations may have different results. We can specify these result
+# variants using additional result files.
 
 # This script looks for its test cases as individual directories in
 # src/test/conf_examples/.  Each test may have these files:
@@ -41,33 +46,42 @@
 #      of "--dump-config short" for this test case.  Exactly one of
 #      "expected" or "error" must be present, or the test will fail.
 #
+# expected_log -- Optional. If this file is present, then it contains a regex
+#      that must be matched by some line in the output of "--verify-config",
+#      which must succeed. Only used if "expected" is also present.
+#
 # error -- If this file is present, then it contains a regex that must be
 #      matched by some line in the output of "--verify-config", which must
 #      fail. Exactly one of "expected" or "error" must be present, or the
 #      test will fail.
 #
-# {expected,error}_${TOR_LIBS_ENABLED}* -- If this file is present,
-#      then the outcome is different when some optional libraries are
+# {expected,expected_log,error}_${TOR_LIBS_ENABLED}* -- If this file is
+#      present, then the outcome is different when some optional libraries are
 #      enabled. If there is no result file matching the exact list of enabled
 #      libraries, the script searches for result files with one or more of
 #      those libraries disabled. The search terminates at the standard result
-#      file.
+#      file. If expected* is present, the script also searches for
+#      expected_log*.
 #
 #      For example:
 #      A test that succeeds, regardless of any enabled libraries:
 #       - expected
 #      A test that has a different result if the nss library is enabled
-#      (but the same result if any other library is enabled):
+#      (but the same result if any other library is enabled). We also check
+#      the log output in this test:
 #       - expected
+#       - expected_log
 #       - expected_nss
+#       - expected_log_nss
 #      A test that fails if the lzma and zstd modules are *not* enabled:
 #       - error
 #       - expected_lzma_zstd
 #
-# {expected,error}*_no_${TOR_MODULES_DISABLED} -- If this file is present,
-#      then the outcome is different when some modules are disabled. If there
-#      is no result file matching the exact list of disabled modules, the
-#      standard result file is used.
+# {expected,expected_log,error}*_no_${TOR_MODULES_DISABLED} -- If this file is
+#      present, then the outcome is different when some modules are disabled.
+#      If there is no result file matching the exact list of disabled modules,
+#      the standard result file is used. If expected* is present, the script
+#      also searches for expected_log*.
 #
 #      For example:
 #      A test that succeeds, regardless of any disabled modules:
@@ -225,6 +239,7 @@ for dir in "${EXAMPLEDIR}"/*; do
     fi
 
     EXPECTED=
+    EXPECTED_LOG=
     ERROR=
     # Search for a custom result file for any combination of enabled optional
     # libraries
@@ -246,6 +261,9 @@ for dir in "${EXAMPLEDIR}"/*; do
                 fi
 
                 EXPECTED="./expected${suffix}"
+                if test -f "./expected_log${suffix}"; then
+                    EXPECTED_LOG="./expected_log${suffix}"
+                fi
                 break
 
             elif test -f "./error${suffix}"; then
@@ -261,8 +279,17 @@ for dir in "${EXAMPLEDIR}"/*; do
     done
 
     if test -f "$EXPECTED"; then
-
         # This case should succeed: run dump-config and see if it does.
+        FAILED_LOG=
+        FAILED_CONFIG=
+
+        if test -f "$EXPECTED_LOG"; then
+            if ! test -s "$EXPECTED_LOG"; then
+                echo "FAIL: expected log file '$EXPECTED_LOG' is empty." >&2
+                echo "Empty expected log files match any output." >&2
+                FINAL_EXIT=$EXITCODE
+            fi
+        fi
 
         "${TOR_BINARY}" -f "./torrc" \
                         --defaults-torrc "${DEFAULTS}" \
@@ -271,6 +298,7 @@ for dir in "${EXAMPLEDIR}"/*; do
                         | "${FILTER}" > "${DATA_DIR}/output.${testname}" \
                         || die "FAIL: $EXPECTED: Tor reported an error."
 
+
         if cmp "$EXPECTED" "${DATA_DIR}/output.${testname}">/dev/null ; then
             # Check round-trip.
             "${TOR_BINARY}" -f "${DATA_DIR}/output.${testname}" \
@@ -286,9 +314,8 @@ for dir in "${EXAMPLEDIR}"/*; do
                 echo "FAIL: $EXPECTED did not match on round-trip." >&2
                 FINAL_EXIT=$EXITCODE
             fi
-
-            echo "OK"
         else
+            FAILED_CONFIG="yes"
             echo "FAIL" >&2
             if test "$(wc -c < "${DATA_DIR}/output.${testname}")" = 0; then
                 # There was no output -- probably we failed.
@@ -303,6 +330,34 @@ for dir in "${EXAMPLEDIR}"/*; do
             FINAL_EXIT=$EXITCODE
         fi
 
+        if test -f "$EXPECTED_LOG"; then
+            # This case should succeed: run verify-config and see if it does.
+
+            "${TOR_BINARY}" --verify-config \
+                            -f ./torrc \
+                            --defaults-torrc "${DEFAULTS}" \
+                            ${CMDLINE} \
+                            > "${DATA_DIR}/output_log.${testname}" \
+                        || die "FAIL: $EXPECTED_LOG: Tor reported an error."
+
+            expect_log="$(cat "$EXPECTED_LOG")"
+            if grep "${expect_log}" "${DATA_DIR}/output_log.${testname}" \
+                    >/dev/null; then
+                :
+            else
+                FAILED_LOG="yes"
+                echo "FAIL" >&2
+                echo "Expected $EXPECTED_LOG: ${expect_log}" >&2
+                echo "Tor said:" >&2
+                cat "${DATA_DIR}/output_log.${testname}" >&2
+                FINAL_EXIT=$EXITCODE
+            fi
+        fi
+
+        if test -z "${FAILED_LOG}${FAILED_CONFIG}"; then
+            echo "OK"
+        fi
+
    elif test -f "$ERROR"; then
         # This case should fail: run verify-config and see if it does.
 
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    14 Nov '19
                    
                        commit 7ef44100c4d85fbd091c3965013b5465872a05f6
Author: teor <teor(a)torproject.org>
Date:   Tue Nov 12 15:21:10 2019 +1000
    test/parseconf: Standardise output messages
    
    Part of 32451.
---
 src/test/test_parseconf.sh | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/src/test/test_parseconf.sh b/src/test/test_parseconf.sh
index f298072c3..962d43dd7 100755
--- a/src/test/test_parseconf.sh
+++ b/src/test/test_parseconf.sh
@@ -311,20 +311,23 @@ for dir in "${EXAMPLEDIR}"/*; do
 
             if ! cmp "${DATA_DIR}/output.${testname}" \
                  "${DATA_DIR}/output_2.${testname}"; then
-                echo "FAIL: $EXPECTED did not match on round-trip." >&2
+                echo "FAIL: $EXPECTED did not match on round-trip:" >&2
+                diff -u "${DATA_DIR}/output.${testname}" \
+                     "${DATA_DIR}/output_2.${testname}" >&2 \
+                    || true
                 FINAL_EXIT=$EXITCODE
             fi
         else
             FAILED_CONFIG="yes"
-            echo "FAIL" >&2
             if test "$(wc -c < "${DATA_DIR}/output.${testname}")" = 0; then
+                echo "FAIL: $EXPECTED: Tor said:" >&2
                 # There was no output -- probably we failed.
                 "${TOR_BINARY}" -f "./torrc" \
                                 --defaults-torrc "${DEFAULTS}" \
                                 --verify-config \
                                 ${CMDLINE} || true
             fi
-            echo "FAIL: $EXPECTED did not match." >&2
+            echo "FAIL: $EXPECTED did not match:" >&2
             diff -u "$EXPECTED" "${DATA_DIR}/output.${testname}" >&2 \
                 || true
             FINAL_EXIT=$EXITCODE
@@ -346,8 +349,8 @@ for dir in "${EXAMPLEDIR}"/*; do
                 :
             else
                 FAILED_LOG="yes"
-                echo "FAIL" >&2
-                echo "Expected $EXPECTED_LOG: ${expect_log}" >&2
+                echo "FAIL: Expected $EXPECTED_LOG:" >&2
+                echo "${expect_log}" >&2
                 echo "Tor said:" >&2
                 cat "${DATA_DIR}/output_log.${testname}" >&2
                 FINAL_EXIT=$EXITCODE
@@ -378,8 +381,8 @@ for dir in "${EXAMPLEDIR}"/*; do
         if grep "${expect_err}" "${DATA_DIR}/output.${testname}" >/dev/null; then
             echo "OK"
         else
-            echo "FAIL" >&2
-            echo "Expected $ERROR: ${expect_err}" >&2
+            echo "FAIL: Expected $ERROR: " >&2
+            echo "${expect_err}" >&2
             echo "Tor said:" >&2
             cat "${DATA_DIR}/output.${testname}" >&2
             FINAL_EXIT=$EXITCODE
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [tor/master] test/parseconf: Stop ignoring --dump-config failures
                        
                        
by nickm@torproject.org 14 Nov '19
                    by nickm@torproject.org 14 Nov '19
14 Nov '19
                    
                        commit 4514bfe9c25f3222e0feba29c5129229287f3963
Author: teor <teor(a)torproject.org>
Date:   Tue Nov 12 16:45:07 2019 +1000
    test/parseconf: Stop ignoring --dump-config failures
    
    When we added the $FILTER for Windows newlines, we made
    the pipeline always exit successfully, even if tor failed.
    
    Fixes bug 32468; bugfix on 0.4.2.1-alpha.
---
 changes/bug32468                         |   3 +
 src/test/conf_examples/pt_02/error       |   1 +
 src/test/conf_examples/pt_02/expected    |   0
 src/test/conf_examples/pt_09/error       |   1 +
 src/test/conf_examples/pt_09/expected    |   0
 src/test/conf_examples/relay_02/error    |   1 +
 src/test/conf_examples/relay_02/expected |   0
 src/test/test_parseconf.sh               | 189 +++++++++++++++++++------------
 8 files changed, 120 insertions(+), 75 deletions(-)
diff --git a/changes/bug32468 b/changes/bug32468
new file mode 100644
index 000000000..fa0d87709
--- /dev/null
+++ b/changes/bug32468
@@ -0,0 +1,3 @@
+  o Minor bugfixes (testing):
+    - Stop ignoring "tor --dump-config" errors in test_parseconf.sh.
+      Fixes bug 32468; bugfix on 0.4.2.1-alpha.
diff --git a/src/test/conf_examples/pt_02/error b/src/test/conf_examples/pt_02/error
new file mode 100644
index 000000000..ce28eab72
--- /dev/null
+++ b/src/test/conf_examples/pt_02/error
@@ -0,0 +1 @@
+Invalid ExtORPort configuration
diff --git a/src/test/conf_examples/pt_02/expected b/src/test/conf_examples/pt_02/expected
deleted file mode 100644
index e69de29bb..000000000
diff --git a/src/test/conf_examples/pt_09/error b/src/test/conf_examples/pt_09/error
new file mode 100644
index 000000000..882b50a7b
--- /dev/null
+++ b/src/test/conf_examples/pt_09/error
@@ -0,0 +1 @@
+Error parsing ServerTransportListenAddr address
\ No newline at end of file
diff --git a/src/test/conf_examples/pt_09/expected b/src/test/conf_examples/pt_09/expected
deleted file mode 100644
index e69de29bb..000000000
diff --git a/src/test/conf_examples/relay_02/error b/src/test/conf_examples/relay_02/error
new file mode 100644
index 000000000..dd87d9f7e
--- /dev/null
+++ b/src/test/conf_examples/relay_02/error
@@ -0,0 +1 @@
+Unrecognized value bad
diff --git a/src/test/conf_examples/relay_02/expected b/src/test/conf_examples/relay_02/expected
deleted file mode 100644
index e69de29bb..000000000
diff --git a/src/test/test_parseconf.sh b/src/test/test_parseconf.sh
index 962d43dd7..b84350985 100755
--- a/src/test/test_parseconf.sh
+++ b/src/test/test_parseconf.sh
@@ -102,6 +102,8 @@
 umask 077
 set -e
 
+MYNAME="$0"
+
 # emulate realpath(), in case coreutils or equivalent is not installed.
 abspath() {
     f="$*"
@@ -156,7 +158,20 @@ fi
 
 FINAL_EXIT=0
 
-die() { echo "$1" >&2 ; FINAL_EXIT=$EXITCODE; }
+NEXT_TEST=
+fail() { printf "FAIL: " >&2;
+         # The first argument is a printf string, so this warning is spurious
+         # shellcheck disable=SC2059
+         printf "$@" >&2;
+         printf '\n' >&2;
+         NEXT_TEST="yes"
+         FINAL_EXIT=$EXITCODE; }
+die()  { printf "FAIL: CRITICAL error in '%s':" "$MYNAME" >&2;
+         # The first argument is a printf string, so this warning is spurious
+         # shellcheck disable=SC2059
+         printf "$@" >&2;
+         printf '\n' >&2;
+         exit $EXITCODE; }
 
 if test "$WINDOWS" = 1; then
     FILTER="dos2unix"
@@ -166,7 +181,8 @@ fi
 
 EMPTY="${DATA_DIR}/EMPTY"
 
-touch "$EMPTY" || die "Couldn't create empty file."
+touch "$EMPTY" || die "Couldn't create empty file '%s'." \
+                      "$EMPTY"
 
 STANDARD_LIBS="libevent\\|openssl\\|zlib"
 # Lib names are restricted to [a-z0-9]* at the moment
@@ -185,9 +201,8 @@ TOR_LIBS_ENABLED=${TOR_LIBS_ENABLED%_}
 # If we ever have more than 3 optional libraries, we'll need more code here
 TOR_LIBS_ENABLED_COUNT="$(echo "$TOR_LIBS_ENABLED_SEARCH" \
                           | tr ' ' '\n' | wc -l)"
-if [ "$TOR_LIBS_ENABLED_COUNT" -gt 3 ]; then
-    echo "$0 can not handle more than 3 optional libraries"
-    exit 1
+if test "$TOR_LIBS_ENABLED_COUNT" -gt 3; then
+    die "Can not handle more than 3 optional libraries"
 fi
 # Brute-force the combinations of libraries
 TOR_LIBS_ENABLED_SEARCH_3="$(echo "$TOR_LIBS_ENABLED" \
@@ -214,7 +229,9 @@ fi
 echo "Disabled Modules: ${TOR_MODULES_DISABLED:-(None)}"
 
 for dir in "${EXAMPLEDIR}"/*; do
-    if ! test -d "${dir}"; then
+    NEXT_TEST=
+
+    if ! test -d "$dir"; then
        # Only count directories.
        continue
     fi
@@ -254,10 +271,11 @@ for dir in "${EXAMPLEDIR}"/*; do
 
                 # Check for broken configs
                 if test -f "./error${suffix}"; then
-                    echo "FAIL: Found both ${dir}/expected${suffix}" >&2
-                    echo "and ${dir}/error${suffix}." >&2
-                    echo "(Only one of these files should exist.)" >&2
-                    FINAL_EXIT=$EXITCODE
+                    fail "Found both '%s' and '%s'.%s" \
+                         "${dir}/expected${suffix}" \
+                         "${dir}/error${suffix}" \
+                         "(Only one of these files should exist.)"
+                    break
                 fi
 
                 EXPECTED="./expected${suffix}"
@@ -272,92 +290,114 @@ for dir in "${EXAMPLEDIR}"/*; do
             fi
         done
 
-        # Exit as soon as the inner loop finds a file
-        if test -f "$EXPECTED" || test -f "$ERROR"; then
+        # Exit as soon as the inner loop finds a file, or fails
+        if test -f "$EXPECTED" || test -f "$ERROR" || test "$NEXT_TEST"; then
             break
         fi
     done
 
-    if test -f "$EXPECTED"; then
+    if test "$NEXT_TEST"; then
+        # The test failed inside the file search loop: go to the next test
+        continue
+    elif test -f "$EXPECTED"; then
         # This case should succeed: run dump-config and see if it does.
-        FAILED_LOG=
-        FAILED_CONFIG=
 
         if test -f "$EXPECTED_LOG"; then
             if ! test -s "$EXPECTED_LOG"; then
-                echo "FAIL: expected log file '$EXPECTED_LOG' is empty." >&2
-                echo "Empty expected log files match any output." >&2
-                FINAL_EXIT=$EXITCODE
+                fail "Expected log file '%s' is empty.%s" \
+                     "$EXPECTED_LOG" \
+                     "(Empty expected log files match any output.)"
+                continue
             fi
         fi
 
-        "${TOR_BINARY}" -f "./torrc" \
-                        --defaults-torrc "${DEFAULTS}" \
-                        --dump-config short \
-                        ${CMDLINE} \
-                        | "${FILTER}" > "${DATA_DIR}/output.${testname}" \
-                        || die "FAIL: $EXPECTED: Tor reported an error."
+        "$TOR_BINARY" -f "./torrc" \
+                      --defaults-torrc "$DEFAULTS" \
+                      --dump-config short \
+                      $CMDLINE > "${DATA_DIR}/output_raw.${testname}" \
+            || fail "'%s': Tor --dump-config reported an error." \
+                    "$EXPECTED"
 
+        "$FILTER" "${DATA_DIR}/output_raw.${testname}" \
+                  > "${DATA_DIR}/output.${testname}" \
+            || fail "'%s': Filter '%s' reported an error." \
+                    "$EXPECTED" \
+                    "$FILTER"
 
-        if cmp "$EXPECTED" "${DATA_DIR}/output.${testname}">/dev/null ; then
+        if cmp "$EXPECTED" "${DATA_DIR}/output.${testname}" > /dev/null; then
             # Check round-trip.
-            "${TOR_BINARY}" -f "${DATA_DIR}/output.${testname}" \
-                            --defaults-torrc "${DATA_DIR}/empty" \
-                            --dump-config short \
-                            | "${FILTER}" \
-                            > "${DATA_DIR}/output_2.${testname}" \
-                        || die \
-                       "FAIL: $EXPECTED: Tor reported an error on round-trip."
+            "$TOR_BINARY" -f "${DATA_DIR}/output.${testname}" \
+                          --defaults-torrc "$EMPTY" \
+                          --dump-config short \
+                          > "${DATA_DIR}/output_2_raw.${testname}" \
+                || fail "'%s': Tor --dump-config reported an error%s." \
+                        "$EXPECTED" \
+                        " on round-trip"
+
+            "$FILTER" "${DATA_DIR}/output_2_raw.${testname}" \
+                      > "${DATA_DIR}/output_2.${testname}" \
+                || fail "'%s': Filter '%s' reported an error." \
+                        "$EXPECTED" \
+                        "$FILTER"
 
             if ! cmp "${DATA_DIR}/output.${testname}" \
                  "${DATA_DIR}/output_2.${testname}"; then
-                echo "FAIL: $EXPECTED did not match on round-trip:" >&2
+                fail "'%s': did not match on round-trip:" \
+                     "$EXPECTED"
                 diff -u "${DATA_DIR}/output.${testname}" \
                      "${DATA_DIR}/output_2.${testname}" >&2 \
                     || true
-                FINAL_EXIT=$EXITCODE
             fi
         else
-            FAILED_CONFIG="yes"
             if test "$(wc -c < "${DATA_DIR}/output.${testname}")" = 0; then
-                echo "FAIL: $EXPECTED: Tor said:" >&2
                 # There was no output -- probably we failed.
-                "${TOR_BINARY}" -f "./torrc" \
-                                --defaults-torrc "${DEFAULTS}" \
-                                --verify-config \
-                                ${CMDLINE} || true
+                fail "'%s': Tor said:" \
+                     "$EXPECTED"
+                "$TOR_BINARY" -f "./torrc" \
+                              --defaults-torrc "$DEFAULTS" \
+                              --verify-config \
+                              $CMDLINE >&2 \
+                    || true
             fi
-            echo "FAIL: $EXPECTED did not match:" >&2
+            fail "'%s' did not match:" \
+                 "$EXPECTED"
             diff -u "$EXPECTED" "${DATA_DIR}/output.${testname}" >&2 \
                 || true
-            FINAL_EXIT=$EXITCODE
         fi
 
-        if test -f "$EXPECTED_LOG"; then
+        if test -f "$EXPECTED_LOG" || test "$NEXT_TEST"; then
             # This case should succeed: run verify-config and see if it does.
+            #
+            # As a temporary hack, we also use this code when --dump-config
+            # has failed, to display the error logs.
+            if ! test -f "$EXPECTED_LOG"; then
+                NON_EMPTY="${DATA_DIR}/NON_EMPTY"
+                echo "This pattern should not match any log messages" \
+                     > "$NON_EMPTY"
+                EXPECTED_LOG=$NON_EMPTY
+            fi
 
-            "${TOR_BINARY}" --verify-config \
-                            -f ./torrc \
-                            --defaults-torrc "${DEFAULTS}" \
-                            ${CMDLINE} \
-                            > "${DATA_DIR}/output_log.${testname}" \
-                        || die "FAIL: $EXPECTED_LOG: Tor reported an error."
-
-            expect_log="$(cat "$EXPECTED_LOG")"
-            if grep "${expect_log}" "${DATA_DIR}/output_log.${testname}" \
-                    >/dev/null; then
+            "$TOR_BINARY" --verify-config \
+                          -f ./torrc \
+                          --defaults-torrc "$DEFAULTS" \
+                          $CMDLINE \
+                          > "${DATA_DIR}/output_log.${testname}" \
+                || fail "'%s': Tor --verify-config reported an error." \
+                        "$EXPECTED_LOG"
+
+            expect_log="$(cat "${EXPECTED_LOG}")"
+            if grep "$expect_log" "${DATA_DIR}/output_log.${testname}" \
+                    > /dev/null; then
                 :
             else
-                FAILED_LOG="yes"
-                echo "FAIL: Expected $EXPECTED_LOG:" >&2
-                echo "${expect_log}" >&2
-                echo "Tor said:" >&2
+                fail "Expected '%s':\\n%s\\nTor said:" \
+                     "$EXPECTED_LOG" \
+                     "$expect_log"
                 cat "${DATA_DIR}/output_log.${testname}" >&2
-                FINAL_EXIT=$EXITCODE
             fi
         fi
 
-        if test -z "${FAILED_LOG}${FAILED_CONFIG}"; then
+        if test -z "$NEXT_TEST"; then
             echo "OK"
         fi
 
@@ -365,35 +405,34 @@ for dir in "${EXAMPLEDIR}"/*; do
         # This case should fail: run verify-config and see if it does.
 
         if ! test -s "$ERROR"; then
-            echo "FAIL: error file '$ERROR' is empty." >&2
-            echo "Empty error files match any output." >&2
-            FINAL_EXIT=$EXITCODE
+            fail "Error file '%s' is empty.%s" \
+                 "$ERROR" \
+                 "(Empty error files match any output.)"
+            continue
         fi
 
-        "${TOR_BINARY}" --verify-config \
-                        -f ./torrc \
-                        --defaults-torrc "${DEFAULTS}" \
-                        ${CMDLINE} \
-                        > "${DATA_DIR}/output.${testname}" \
-                        && die "FAIL: $ERROR: Tor did not report an error."
+        "$TOR_BINARY" --verify-config \
+                      -f ./torrc \
+                      --defaults-torrc "$DEFAULTS" \
+                      $CMDLINE \
+                      > "${DATA_DIR}/output.${testname}" \
+            && fail "'%s': Tor did not report an error." \
+                    "$ERROR"
 
         expect_err="$(cat "$ERROR")"
         if grep "${expect_err}" "${DATA_DIR}/output.${testname}" >/dev/null; then
             echo "OK"
         else
-            echo "FAIL: Expected $ERROR: " >&2
-            echo "${expect_err}" >&2
-            echo "Tor said:" >&2
+            fail "Expected '%s':\\n%s\\nTor said:" \
+                 "$ERROR" \
+                 "$expect_err"
             cat "${DATA_DIR}/output.${testname}" >&2
-            FINAL_EXIT=$EXITCODE
         fi
 
     else
         # This case is not actually configured with a success or a failure.
         # call that an error.
-
-        echo "FAIL: Did not find ${dir}/*expected or ${dir}/*error." >&2
-        FINAL_EXIT=$EXITCODE
+        fail "Did not find ${dir}/*expected or ${dir}/*error."
     fi
 
     cd "${PREV_DIR}"
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    14 Nov '19
                    
                        commit e6ca32fae3031e33898d541bf4da28c58b978713
Author: teor <teor(a)torproject.org>
Date:   Tue Nov 12 16:51:18 2019 +1000
    test/parseconf: Use consistent formatting
    
    Make spacing, quotes, and env vars consistent.
    
    Cleanup after 32451 and 32468.
---
 src/test/test_parseconf.sh | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/src/test/test_parseconf.sh b/src/test/test_parseconf.sh
index b84350985..78b88c48e 100755
--- a/src/test/test_parseconf.sh
+++ b/src/test/test_parseconf.sh
@@ -107,7 +107,7 @@ MYNAME="$0"
 # emulate realpath(), in case coreutils or equivalent is not installed.
 abspath() {
     f="$*"
-    if [ -d "$f" ]; then
+    if test -d "$f"; then
         dir="$f"
         base=""
     else
@@ -119,8 +119,8 @@ abspath() {
 }
 
 # find the tor binary
-if [ $# -ge 1 ]; then
-  TOR_BINARY="${1}"
+if test $# -ge 1; then
+  TOR_BINARY="$1"
   shift
 else
   TOR_BINARY="${TESTING_TOR_BINARY:-./src/app/tor}"
@@ -128,7 +128,7 @@ fi
 
 TOR_BINARY="$(abspath "$TOR_BINARY")"
 
-echo "TOR BINARY IS ${TOR_BINARY}"
+echo "TOR BINARY IS $TOR_BINARY"
 
 # make a safe space for temporary files
 DATA_DIR=$(mktemp -d -t tor_parseconf_tests.XXXXXX)
@@ -163,14 +163,14 @@ fail() { printf "FAIL: " >&2;
          # The first argument is a printf string, so this warning is spurious
          # shellcheck disable=SC2059
          printf "$@" >&2;
-         printf '\n' >&2;
+         printf "\\n" >&2;
          NEXT_TEST="yes"
          FINAL_EXIT=$EXITCODE; }
 die()  { printf "FAIL: CRITICAL error in '%s':" "$MYNAME" >&2;
          # The first argument is a printf string, so this warning is spurious
          # shellcheck disable=SC2059
          printf "$@" >&2;
-         printf '\n' >&2;
+         printf "\\n" >&2;
          exit $EXITCODE; }
 
 if test "$WINDOWS" = 1; then
@@ -223,7 +223,7 @@ TOR_MODULES_DISABLED=${TOR_MODULES_DISABLED%_}
 
 echo "Tor is configured with:"
 echo "Optional Libraries: ${TOR_LIBS_ENABLED:-(None)}"
-if [ -n "${TOR_LIBS_ENABLED}" ]; then
+if test "$TOR_LIBS_ENABLED"; then
     echo "Optional Library Search List: $TOR_LIBS_ENABLED_SEARCH"
 fi
 echo "Disabled Modules: ${TOR_MODULES_DISABLED:-(None)}"
@@ -238,10 +238,11 @@ for dir in "${EXAMPLEDIR}"/*; do
 
     testname="$(basename "${dir}")"
     # We use printf since "echo -n" is not standard
-    printf "%s: " "$testname"
+    printf "%s: " \
+           "$testname"
 
     PREV_DIR="$(pwd)"
-    cd "${dir}"
+    cd "$dir"
 
     if test -f "./torrc.defaults"; then
         DEFAULTS="./torrc.defaults"
@@ -419,8 +420,8 @@ for dir in "${EXAMPLEDIR}"/*; do
             && fail "'%s': Tor did not report an error." \
                     "$ERROR"
 
-        expect_err="$(cat "$ERROR")"
-        if grep "${expect_err}" "${DATA_DIR}/output.${testname}" >/dev/null; then
+        expect_err="$(cat "${ERROR}")"
+        if grep "$expect_err" "${DATA_DIR}/output.${testname}" > /dev/null; then
             echo "OK"
         else
             fail "Expected '%s':\\n%s\\nTor said:" \
@@ -435,7 +436,7 @@ for dir in "${EXAMPLEDIR}"/*; do
         fail "Did not find ${dir}/*expected or ${dir}/*error."
     fi
 
-    cd "${PREV_DIR}"
+    cd "$PREV_DIR"
 
 done
 
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    14 Nov '19
                    
                        commit b4b3060f692ed934fe89d791be683a7506e5860e
Author: teor <teor(a)torproject.org>
Date:   Wed Nov 13 14:00:09 2019 +1000
    test/parseconf: Rename some functions, and reformat
    
    Part of 32451.
---
 src/test/test_parseconf.sh | 110 +++++++++++++++++++++++----------------------
 1 file changed, 56 insertions(+), 54 deletions(-)
diff --git a/src/test/test_parseconf.sh b/src/test/test_parseconf.sh
index 78b88c48e..237bf33ce 100755
--- a/src/test/test_parseconf.sh
+++ b/src/test/test_parseconf.sh
@@ -159,19 +159,21 @@ fi
 FINAL_EXIT=0
 
 NEXT_TEST=
-fail() { printf "FAIL: " >&2;
-         # The first argument is a printf string, so this warning is spurious
-         # shellcheck disable=SC2059
-         printf "$@" >&2;
-         printf "\\n" >&2;
-         NEXT_TEST="yes"
-         FINAL_EXIT=$EXITCODE; }
-die()  { printf "FAIL: CRITICAL error in '%s':" "$MYNAME" >&2;
-         # The first argument is a printf string, so this warning is spurious
-         # shellcheck disable=SC2059
-         printf "$@" >&2;
-         printf "\\n" >&2;
-         exit $EXITCODE; }
+fail_printf() { printf "FAIL: " >&2;
+                # The first argument is a printf string, so this warning is
+                # spurious
+                # shellcheck disable=SC2059
+                printf "$@" >&2;
+                printf "\\n" >&2;
+                NEXT_TEST="yes"
+                FINAL_EXIT=$EXITCODE; }
+die_printf()  { printf "FAIL: CRITICAL error in '%s':" "$MYNAME" >&2;
+                # The first argument is a printf string, so this warning is
+                # spurious
+                # shellcheck disable=SC2059
+                printf "$@" >&2;
+                printf "\\n" >&2;
+                exit $EXITCODE; }
 
 if test "$WINDOWS" = 1; then
     FILTER="dos2unix"
@@ -181,8 +183,8 @@ fi
 
 EMPTY="${DATA_DIR}/EMPTY"
 
-touch "$EMPTY" || die "Couldn't create empty file '%s'." \
-                      "$EMPTY"
+touch "$EMPTY" || die_printf "Couldn't create empty file '%s'." \
+                             "$EMPTY"
 
 STANDARD_LIBS="libevent\\|openssl\\|zlib"
 # Lib names are restricted to [a-z0-9]* at the moment
@@ -202,7 +204,7 @@ TOR_LIBS_ENABLED=${TOR_LIBS_ENABLED%_}
 TOR_LIBS_ENABLED_COUNT="$(echo "$TOR_LIBS_ENABLED_SEARCH" \
                           | tr ' ' '\n' | wc -l)"
 if test "$TOR_LIBS_ENABLED_COUNT" -gt 3; then
-    die "Can not handle more than 3 optional libraries"
+    die_printf "Can not handle more than 3 optional libraries"
 fi
 # Brute-force the combinations of libraries
 TOR_LIBS_ENABLED_SEARCH_3="$(echo "$TOR_LIBS_ENABLED" \
@@ -272,10 +274,10 @@ for dir in "${EXAMPLEDIR}"/*; do
 
                 # Check for broken configs
                 if test -f "./error${suffix}"; then
-                    fail "Found both '%s' and '%s'.%s" \
-                         "${dir}/expected${suffix}" \
-                         "${dir}/error${suffix}" \
-                         "(Only one of these files should exist.)"
+                    fail_printf "Found both '%s' and '%s'.%s" \
+                                "${dir}/expected${suffix}" \
+                                "${dir}/error${suffix}" \
+                                "(Only one of these files should exist.)"
                     break
                 fi
 
@@ -305,9 +307,9 @@ for dir in "${EXAMPLEDIR}"/*; do
 
         if test -f "$EXPECTED_LOG"; then
             if ! test -s "$EXPECTED_LOG"; then
-                fail "Expected log file '%s' is empty.%s" \
-                     "$EXPECTED_LOG" \
-                     "(Empty expected log files match any output.)"
+                fail_printf "Expected log file '%s' is empty.%s" \
+                            "$EXPECTED_LOG" \
+                            "(Empty expected log files match any output.)"
                 continue
             fi
         fi
@@ -316,14 +318,14 @@ for dir in "${EXAMPLEDIR}"/*; do
                       --defaults-torrc "$DEFAULTS" \
                       --dump-config short \
                       $CMDLINE > "${DATA_DIR}/output_raw.${testname}" \
-            || fail "'%s': Tor --dump-config reported an error." \
-                    "$EXPECTED"
+            || fail_printf "'%s': Tor --dump-config reported an error." \
+                           "$EXPECTED"
 
         "$FILTER" "${DATA_DIR}/output_raw.${testname}" \
                   > "${DATA_DIR}/output.${testname}" \
-            || fail "'%s': Filter '%s' reported an error." \
-                    "$EXPECTED" \
-                    "$FILTER"
+            || fail_printf "'%s': Filter '%s' reported an error." \
+                           "$EXPECTED" \
+                           "$FILTER"
 
         if cmp "$EXPECTED" "${DATA_DIR}/output.${testname}" > /dev/null; then
             # Check round-trip.
@@ -331,20 +333,20 @@ for dir in "${EXAMPLEDIR}"/*; do
                           --defaults-torrc "$EMPTY" \
                           --dump-config short \
                           > "${DATA_DIR}/output_2_raw.${testname}" \
-                || fail "'%s': Tor --dump-config reported an error%s." \
-                        "$EXPECTED" \
-                        " on round-trip"
+                || fail_printf "'%s': Tor --dump-config reported an %s." \
+                               "$EXPECTED" \
+                               "error on round-trip"
 
             "$FILTER" "${DATA_DIR}/output_2_raw.${testname}" \
                       > "${DATA_DIR}/output_2.${testname}" \
-                || fail "'%s': Filter '%s' reported an error." \
-                        "$EXPECTED" \
-                        "$FILTER"
+                || fail_printf "'%s': Filter '%s' reported an error." \
+                               "$EXPECTED" \
+                               "$FILTER"
 
             if ! cmp "${DATA_DIR}/output.${testname}" \
                  "${DATA_DIR}/output_2.${testname}"; then
-                fail "'%s': did not match on round-trip:" \
-                     "$EXPECTED"
+                fail_printf "'%s': did not match on round-trip:" \
+                            "$EXPECTED"
                 diff -u "${DATA_DIR}/output.${testname}" \
                      "${DATA_DIR}/output_2.${testname}" >&2 \
                     || true
@@ -352,16 +354,16 @@ for dir in "${EXAMPLEDIR}"/*; do
         else
             if test "$(wc -c < "${DATA_DIR}/output.${testname}")" = 0; then
                 # There was no output -- probably we failed.
-                fail "'%s': Tor said:" \
-                     "$EXPECTED"
+                fail_printf "'%s': Tor said:" \
+                            "$EXPECTED"
                 "$TOR_BINARY" -f "./torrc" \
                               --defaults-torrc "$DEFAULTS" \
                               --verify-config \
                               $CMDLINE >&2 \
                     || true
             fi
-            fail "'%s' did not match:" \
-                 "$EXPECTED"
+            fail_printf "'%s' did not match:" \
+                        "$EXPECTED"
             diff -u "$EXPECTED" "${DATA_DIR}/output.${testname}" >&2 \
                 || true
         fi
@@ -383,17 +385,17 @@ for dir in "${EXAMPLEDIR}"/*; do
                           --defaults-torrc "$DEFAULTS" \
                           $CMDLINE \
                           > "${DATA_DIR}/output_log.${testname}" \
-                || fail "'%s': Tor --verify-config reported an error." \
-                        "$EXPECTED_LOG"
+                || fail_printf "'%s': Tor --verify-config reported an error." \
+                               "$EXPECTED_LOG"
 
             expect_log="$(cat "${EXPECTED_LOG}")"
             if grep "$expect_log" "${DATA_DIR}/output_log.${testname}" \
                     > /dev/null; then
                 :
             else
-                fail "Expected '%s':\\n%s\\nTor said:" \
-                     "$EXPECTED_LOG" \
-                     "$expect_log"
+                fail_printf "Expected '%s':\\n%s\\nTor said:" \
+                            "$EXPECTED_LOG" \
+                            "$expect_log"
                 cat "${DATA_DIR}/output_log.${testname}" >&2
             fi
         fi
@@ -406,9 +408,9 @@ for dir in "${EXAMPLEDIR}"/*; do
         # This case should fail: run verify-config and see if it does.
 
         if ! test -s "$ERROR"; then
-            fail "Error file '%s' is empty.%s" \
-                 "$ERROR" \
-                 "(Empty error files match any output.)"
+            fail_printf "Error file '%s' is empty.%s" \
+                        "$ERROR" \
+                        "(Empty error files match any output.)"
             continue
         fi
 
@@ -417,23 +419,23 @@ for dir in "${EXAMPLEDIR}"/*; do
                       --defaults-torrc "$DEFAULTS" \
                       $CMDLINE \
                       > "${DATA_DIR}/output.${testname}" \
-            && fail "'%s': Tor did not report an error." \
-                    "$ERROR"
+            && fail_printf "'%s': Tor did not report an error." \
+                           "$ERROR"
 
         expect_err="$(cat "${ERROR}")"
         if grep "$expect_err" "${DATA_DIR}/output.${testname}" > /dev/null; then
             echo "OK"
         else
-            fail "Expected '%s':\\n%s\\nTor said:" \
-                 "$ERROR" \
-                 "$expect_err"
+            fail_printf "Expected '%s':\\n%s\\nTor said:" \
+                        "$ERROR" \
+                        "$expect_err"
             cat "${DATA_DIR}/output.${testname}" >&2
         fi
 
     else
         # This case is not actually configured with a success or a failure.
         # call that an error.
-        fail "Did not find ${dir}/*expected or ${dir}/*error."
+        fail_printf "Did not find ${dir}/*expected or ${dir}/*error."
     fi
 
     cd "$PREV_DIR"
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    14 Nov '19
                    
                        commit 39046019ec1192bd8222821a6b8677fabc0a9968
Author: teor <teor(a)torproject.org>
Date:   Wed Nov 13 16:37:32 2019 +1000
    test/parseconf: Refactor and standardise, stage 1
    
    Remove duplicate code, and standardise similar behaviour.
    Add some additional error checking.
    
    Cleanup after 32451.
---
 src/test/test_parseconf.sh | 400 ++++++++++++++++++++++++++++++---------------
 1 file changed, 272 insertions(+), 128 deletions(-)
diff --git a/src/test/test_parseconf.sh b/src/test/test_parseconf.sh
index 237bf33ce..edda6c3ef 100755
--- a/src/test/test_parseconf.sh
+++ b/src/test/test_parseconf.sh
@@ -128,7 +128,7 @@ fi
 
 TOR_BINARY="$(abspath "$TOR_BINARY")"
 
-echo "TOR BINARY IS $TOR_BINARY"
+echo "Using Tor binary '$TOR_BINARY'."
 
 # make a safe space for temporary files
 DATA_DIR=$(mktemp -d -t tor_parseconf_tests.XXXXXX)
@@ -157,23 +157,32 @@ else
 fi
 
 FINAL_EXIT=0
-
 NEXT_TEST=
-fail_printf() { printf "FAIL: " >&2;
-                # The first argument is a printf string, so this warning is
-                # spurious
-                # shellcheck disable=SC2059
-                printf "$@" >&2;
-                printf "\\n" >&2;
-                NEXT_TEST="yes"
-                FINAL_EXIT=$EXITCODE; }
-die_printf()  { printf "FAIL: CRITICAL error in '%s':" "$MYNAME" >&2;
-                # The first argument is a printf string, so this warning is
-                # spurious
-                # shellcheck disable=SC2059
-                printf "$@" >&2;
-                printf "\\n" >&2;
-                exit $EXITCODE; }
+
+# Log a failure message to stderr, using $@ as a printf string and arguments
+# Set NEXT_TEST to "yes" and FINAL_EXIT to $EXITCODE.
+fail_printf()
+{
+    printf "FAIL: " >&2
+    # The first argument is a printf string, so this warning is spurious
+    # shellcheck disable=SC2059
+    printf "$@" >&2
+    printf "\\n" >&2
+    NEXT_TEST="yes"
+    FINAL_EXIT=$EXITCODE
+}
+
+# Log a failure message to stderr, using $@ as a printf string and arguments
+# Exit with status $EXITCODE.
+die_printf()
+{
+    printf "FAIL: CRITICAL error in '%s':" "$MYNAME" >&2
+    # The first argument is a printf string, so this warning is spurious
+    # shellcheck disable=SC2059
+    printf "$@" >&2
+    printf "\\n" >&2
+    exit $EXITCODE
+}
 
 if test "$WINDOWS" = 1; then
     FILTER="dos2unix"
@@ -182,9 +191,12 @@ else
 fi
 
 EMPTY="${DATA_DIR}/EMPTY"
-
 touch "$EMPTY" || die_printf "Couldn't create empty file '%s'." \
                              "$EMPTY"
+NON_EMPTY="${DATA_DIR}/NON_EMPTY"
+echo "This pattern should not match any log messages" \
+     > "$NON_EMPTY" || die_printf "Couldn't create non-empty file '%s'." \
+                                  "$NON_EMPTY"
 
 STANDARD_LIBS="libevent\\|openssl\\|zlib"
 # Lib names are restricted to [a-z0-9]* at the moment
@@ -230,6 +242,178 @@ if test "$TOR_LIBS_ENABLED"; then
 fi
 echo "Disabled Modules: ${TOR_MODULES_DISABLED:-(None)}"
 
+# Yes, unix uses "0" for a successful command
+TRUE=0
+FALSE=1
+
+# Run tor --verify-config on the torrc $1, and defaults torrc $2, which may
+# be $EMPTY. Pass tor the extra command line arguments $3, which will be
+# passed unquoted.
+# Send tor's standard output to stderr.
+log_verify_config()
+{
+    # We need cmdline unquoted
+    # shellcheck disable=SC2086
+    "$TOR_BINARY" --verify-config \
+                  -f "$1" \
+                  --defaults-torrc "$2" \
+                  $3 \
+                  >&2 \
+        || true
+}
+
+# Run "tor --dump-config short" on the torrc $1, and defaults torrc $2, which
+# may be $EMPTY. Pass tor the extra command line arguments $3, which will be
+# passed unquoted.
+# Send the standard output to $4.
+# If tor fails, fail_printf() using the file name $5, and context $6,
+# which may be an empty string. Then run "tor --verify-config", and log tor's
+# error messages to stderr.
+dump_config()
+{
+    if test "$6"; then
+        CONTEXT=" $6"
+    else
+        CONTEXT=""
+    fi
+
+    # We need cmdline unquoted
+    # shellcheck disable=SC2086
+    if ! "$TOR_BINARY" --dump-config short \
+                       -f "$1" \
+                       --defaults-torrc "$2" \
+                       $3 \
+                       > "$4"; then
+        fail_printf "'%s': Tor --dump-config reported an error%s. Tor said:" \
+                    "$5" \
+                    "$CONTEXT"
+        log_verify_config "$1" \
+                          "$2" \
+                          "$3"
+    fi
+}
+
+# Run "$FILTER" on the input $1.
+# Send the standard output to $2.
+# If tor fails, log a failure message using the file name $3, and context $4,
+# which may be an empty string.
+filter()
+{
+    if test "$4"; then
+        CONTEXT=" $4"
+    else
+        CONTEXT=""
+    fi
+
+    "$FILTER" "$1" \
+              > "$2" \
+        || fail_printf "'%s': Filter '%s' reported an error%s." \
+                       "$3" \
+                       "$FILTER" \
+                       "$CONTEXT"
+}
+
+# Compare the input file $1, and output file $2.
+#
+# If they are different, fail. If this is the first step that failed in this
+# test, run log_verify_config with torrc $3, defaults torrc $4, and command
+# line $5, to log Tor's error messages. Finally, log the differences between
+# the files.
+#
+# If the file contents are identical, returns true. Otherwise, return false.
+#
+# Log failure messages using fail_printf(), with the file name $6, and
+# context $7, which may be an empty string.
+check_diff()
+{
+    if test "$7"; then
+        CONTEXT=" $=7"
+    else
+        CONTEXT=""
+    fi
+
+    if cmp "$1" "$2" > /dev/null; then
+        return "$TRUE"
+    else
+        # If this is the first step that failed in this test,
+        # show tor's logs
+        if test -z "$NEXT_TEST"; then
+           fail_printf "'%s': Tor said%s:" \
+                       "$6" \
+                       "$CONTEXT"
+           log_verify_config "$3" \
+                             "$4" \
+                             "$5"
+        fi
+        fail_printf "'%s' did not match%s:" \
+                    "$6" \
+                    "$CONTEXT"
+        diff -u "$1" "$2" >&2 \
+            || true
+        return "$FALSE"
+    fi
+}
+
+# Check if $1 is an empty file.
+# If it is, fail_printf() using $2 as the type of file.
+# Returns true if the file is empty, false otherwise.
+check_empty_pattern()
+{
+    if ! test -s "$1"; then
+        fail_printf "%s file '%s' is empty, and will match any output." \
+                    "$2" \
+                    "$1"
+        return "$TRUE"
+    else
+        return "$FALSE"
+    fi
+}
+
+# Run tor --verify-config on the torrc $1, and defaults torrc $2, which may
+# be $EMPTY. Pass tor the extra command line arguments $3, which will be
+# passed unquoted.
+# Send tor's standard output to $4.
+# If tor's exit status does not match the boolean $5, fail_printf()
+# using the file name $6, and context $7, which is required.
+verify_config()
+{
+    RESULT=$TRUE
+    # We need cmdline unquoted
+    # shellcheck disable=SC2086
+    "$TOR_BINARY" --verify-config \
+                  -f "$1" \
+                  --defaults-torrc "$2" \
+                  $3 \
+                  > "$4" || RESULT=$FALSE
+
+    # Convert the actual and expected results to boolean, and compare
+    if test $((! (! RESULT))) -ne $((! (! $5))); then
+        fail_printf "'%s': Tor --verify-config did not %s." \
+                    "$6" \
+                    "$7"
+    fi
+}
+
+# Check for the pattern in file $1, in the lines in the output file $2.
+# Uses grep with the entire contents of $1 as the pattern. (Not "grep -f".)
+#
+# If the pattern does not match any lines in the output file, fail.
+# Log the pattern, and the entire contents of the output file.
+#
+# Log failure messages using fail_printf(), with the file name $1, and
+# context $3, which is required.
+check_pattern()
+{
+    expect_log="$(cat "$1")"
+    if ! grep "$expect_log" "$2" > /dev/null; then
+        fail_printf "Expected %s '%s':\\n%s\\nTor said:" \
+                    "$3" \
+                    "$1" \
+                    "$expect_log"
+        cat "$2" >&2
+    fi
+}
+
 for dir in "${EXAMPLEDIR}"/*; do
     NEXT_TEST=
 
@@ -306,140 +490,100 @@ for dir in "${EXAMPLEDIR}"/*; do
         # This case should succeed: run dump-config and see if it does.
 
         if test -f "$EXPECTED_LOG"; then
-            if ! test -s "$EXPECTED_LOG"; then
-                fail_printf "Expected log file '%s' is empty.%s" \
-                            "$EXPECTED_LOG" \
-                            "(Empty expected log files match any output.)"
+            if check_empty_pattern "$EXPECTED_LOG" "Expected log"; then
                 continue
             fi
         fi
 
-        "$TOR_BINARY" -f "./torrc" \
-                      --defaults-torrc "$DEFAULTS" \
-                      --dump-config short \
-                      $CMDLINE > "${DATA_DIR}/output_raw.${testname}" \
-            || fail_printf "'%s': Tor --dump-config reported an error." \
-                           "$EXPECTED"
-
-        "$FILTER" "${DATA_DIR}/output_raw.${testname}" \
-                  > "${DATA_DIR}/output.${testname}" \
-            || fail_printf "'%s': Filter '%s' reported an error." \
-                           "$EXPECTED" \
-                           "$FILTER"
-
-        if cmp "$EXPECTED" "${DATA_DIR}/output.${testname}" > /dev/null; then
+        dump_config "./torrc" \
+                    "$DEFAULTS" \
+                    "$CMDLINE" \
+                    "${DATA_DIR}/output_raw.${testname}" \
+                    "$EXPECTED" \
+                    ""
+
+        filter "${DATA_DIR}/output_raw.${testname}" \
+               "${DATA_DIR}/output.${testname}" \
+               "$EXPECTED" \
+               ""
+
+        if check_diff "$EXPECTED" \
+                      "${DATA_DIR}/output.${testname}" \
+                      "./torrc" \
+                      "$DEFAULTS" \
+                      "$CMDLINE" \
+                      "$EXPECTED" \
+                      ""; then
             # Check round-trip.
-            "$TOR_BINARY" -f "${DATA_DIR}/output.${testname}" \
-                          --defaults-torrc "$EMPTY" \
-                          --dump-config short \
-                          > "${DATA_DIR}/output_2_raw.${testname}" \
-                || fail_printf "'%s': Tor --dump-config reported an %s." \
-                               "$EXPECTED" \
-                               "error on round-trip"
-
-            "$FILTER" "${DATA_DIR}/output_2_raw.${testname}" \
-                      > "${DATA_DIR}/output_2.${testname}" \
-                || fail_printf "'%s': Filter '%s' reported an error." \
-                               "$EXPECTED" \
-                               "$FILTER"
-
-            if ! cmp "${DATA_DIR}/output.${testname}" \
-                 "${DATA_DIR}/output_2.${testname}"; then
-                fail_printf "'%s': did not match on round-trip:" \
-                            "$EXPECTED"
-                diff -u "${DATA_DIR}/output.${testname}" \
-                     "${DATA_DIR}/output_2.${testname}" >&2 \
-                    || true
-            fi
-        else
-            if test "$(wc -c < "${DATA_DIR}/output.${testname}")" = 0; then
-                # There was no output -- probably we failed.
-                fail_printf "'%s': Tor said:" \
-                            "$EXPECTED"
-                "$TOR_BINARY" -f "./torrc" \
-                              --defaults-torrc "$DEFAULTS" \
-                              --verify-config \
-                              $CMDLINE >&2 \
-                    || true
-            fi
-            fail_printf "'%s' did not match:" \
-                        "$EXPECTED"
-            diff -u "$EXPECTED" "${DATA_DIR}/output.${testname}" >&2 \
-                || true
+            dump_config "${DATA_DIR}/output.${testname}" \
+                        "$EMPTY" \
+                        "" \
+                        "${DATA_DIR}/output_2_raw.${testname}" \
+                        "$EXPECTED" \
+                        "on round-trip"
+
+            filter "${DATA_DIR}/output_2_raw.${testname}" \
+                   "${DATA_DIR}/output_2.${testname}" \
+                   "$EXPECTED" \
+                   "on round-trip"
+
+            check_diff "${DATA_DIR}/output.${testname}" \
+                       "${DATA_DIR}/output_2.${testname}" \
+                       "${DATA_DIR}/output.${testname}" \
+                       "$EMPTY" \
+                       "" \
+                       "$EXPECTED" \
+                       "on round-trip" || true
         fi
 
-        if test -f "$EXPECTED_LOG" || test "$NEXT_TEST"; then
+        if test -f "$EXPECTED_LOG"; then
             # This case should succeed: run verify-config and see if it does.
-            #
-            # As a temporary hack, we also use this code when --dump-config
-            # has failed, to display the error logs.
-            if ! test -f "$EXPECTED_LOG"; then
-                NON_EMPTY="${DATA_DIR}/NON_EMPTY"
-                echo "This pattern should not match any log messages" \
-                     > "$NON_EMPTY"
-                EXPECTED_LOG=$NON_EMPTY
-            fi
 
-            "$TOR_BINARY" --verify-config \
-                          -f ./torrc \
-                          --defaults-torrc "$DEFAULTS" \
-                          $CMDLINE \
-                          > "${DATA_DIR}/output_log.${testname}" \
-                || fail_printf "'%s': Tor --verify-config reported an error." \
-                               "$EXPECTED_LOG"
-
-            expect_log="$(cat "${EXPECTED_LOG}")"
-            if grep "$expect_log" "${DATA_DIR}/output_log.${testname}" \
-                    > /dev/null; then
-                :
-            else
-                fail_printf "Expected '%s':\\n%s\\nTor said:" \
-                            "$EXPECTED_LOG" \
-                            "$expect_log"
-                cat "${DATA_DIR}/output_log.${testname}" >&2
-            fi
-        fi
-
-        if test -z "$NEXT_TEST"; then
-            echo "OK"
+            verify_config "./torrc" \
+                          "$DEFAULTS" \
+                          "$CMDLINE" \
+                          "${DATA_DIR}/output_log.${testname}" \
+                          "$TRUE" \
+                          "$EXPECTED_LOG" \
+                          "succeed"
+
+            check_pattern "$EXPECTED_LOG" \
+                          "${DATA_DIR}/output_log.${testname}" \
+                          "log"
         fi
 
    elif test -f "$ERROR"; then
         # This case should fail: run verify-config and see if it does.
 
         if ! test -s "$ERROR"; then
-            fail_printf "Error file '%s' is empty.%s" \
-                        "$ERROR" \
-                        "(Empty error files match any output.)"
-            continue
-        fi
-
-        "$TOR_BINARY" --verify-config \
-                      -f ./torrc \
-                      --defaults-torrc "$DEFAULTS" \
-                      $CMDLINE \
-                      > "${DATA_DIR}/output.${testname}" \
-            && fail_printf "'%s': Tor did not report an error." \
-                           "$ERROR"
-
-        expect_err="$(cat "${ERROR}")"
-        if grep "$expect_err" "${DATA_DIR}/output.${testname}" > /dev/null; then
-            echo "OK"
-        else
-            fail_printf "Expected '%s':\\n%s\\nTor said:" \
-                        "$ERROR" \
-                        "$expect_err"
-            cat "${DATA_DIR}/output.${testname}" >&2
+            if check_empty_pattern "$ERROR" "Error"; then
+                continue
+            fi
         fi
 
+        verify_config "./torrc" \
+                      "$DEFAULTS" \
+                      "$CMDLINE" \
+                      "${DATA_DIR}/output.${testname}" \
+                      "$FALSE" \
+                      "$ERROR" \
+                      "report an error"
+
+        check_pattern "$ERROR" \
+                      "${DATA_DIR}/output.${testname}" \
+                      "error"
     else
         # This case is not actually configured with a success or a failure.
         # call that an error.
         fail_printf "Did not find ${dir}/*expected or ${dir}/*error."
     fi
 
+    if test -z "$NEXT_TEST"; then
+        echo "OK"
+    fi
+
     cd "$PREV_DIR"
 
 done
 
-exit $FINAL_EXIT
+exit "$FINAL_EXIT"
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    14 Nov '19
                    
                        commit 2c4ada729e275f37a2165866a78378ff606cb451
Author: teor <teor(a)torproject.org>
Date:   Thu Nov 14 10:50:20 2019 +1000
    test/parseconf: Show tor command lines on failure
    
    Part of 32451.
---
 src/test/test_parseconf.sh | 88 +++++++++++++++++++++++++++++++---------------
 1 file changed, 59 insertions(+), 29 deletions(-)
diff --git a/src/test/test_parseconf.sh b/src/test/test_parseconf.sh
index 816ed97e3..2156077d7 100755
--- a/src/test/test_parseconf.sh
+++ b/src/test/test_parseconf.sh
@@ -252,6 +252,15 @@ FALSE=1
 # Send tor's standard output to stderr.
 log_verify_config()
 {
+    # show the command we're about to execute
+    # log_verify_config() is only called when we've failed
+    printf "Tor --verify-config said:\\n" >&2
+    printf "$ %s %s %s %s %s %s %s\\n" \
+    "$TOR_BINARY" --verify-config \
+                  -f "$1" \
+                  --defaults-torrc "$2" \
+                  "$3" \
+                  >&2
     # We need cmdline unquoted
     # shellcheck disable=SC2086
     "$TOR_BINARY" --verify-config \
@@ -266,6 +275,8 @@ log_verify_config()
 # may be $EMPTY. Pass tor the extra command line arguments $3, which will be
 # passed unquoted. Send tor's standard output to $4.
 #
+# Set $FULL_TOR_CMD to the tor command line that was executed.
+#
 # If tor fails, fail_printf() using the file name $5, and context $6,
 # which may be an empty string. Then run log_verify_config().
 dump_config()
@@ -276,6 +287,13 @@ dump_config()
         CONTEXT=""
     fi
 
+    # keep the command we're about to execute, and show if it we fail
+    FULL_TOR_CMD=$(printf "$ %s %s %s %s %s %s %s %s" \
+         "$TOR_BINARY" --dump-config short \
+                       -f "$1" \
+                       --defaults-torrc "$2" \
+                       "$3"
+             )
     # We need cmdline unquoted
     # shellcheck disable=SC2086
     if ! "$TOR_BINARY" --dump-config short \
@@ -283,9 +301,10 @@ dump_config()
                        --defaults-torrc "$2" \
                        $3 \
                        > "$4"; then
-        fail_printf "'%s': Tor --dump-config reported an error%s. Tor said:" \
+        fail_printf "'%s': Tor --dump-config reported an error%s:\\n%s" \
                     "$5" \
-                    "$CONTEXT"
+                    "$CONTEXT" \
+                    "$FULL_TOR_CMD"
         log_verify_config "$1" \
                           "$2" \
                           "$3"
@@ -314,19 +333,18 @@ filter()
 
 # Compare the expected file $1, and output file $2.
 #
-# If they are different, fail. If this is the first step that failed in this
-# test, run log_verify_config() with torrc $3, defaults torrc $4, and command
-# line $5, to log Tor's error messages. Finally, log the differences between
-# the files.
+# If they are different, fail. Log the differences between the files.
+# Run log_verify_config() with torrc $3, defaults torrc $4, and command
+# line $5, to log Tor's error messages.
 #
 # If the file contents are identical, returns true. Otherwise, return false.
 #
-# Log failure messages using fail_printf(), with the expected file name, and
-# context $6, which may be an empty string.
+# Log failure messages using fail_printf(), with the expected file name,
+# context $6, which may be an empty string, and the tor command line $7.
 check_diff()
 {
     if test "$6"; then
-        CONTEXT=" $=6"
+        CONTEXT=" $6"
     else
         CONTEXT=""
     fi
@@ -334,21 +352,15 @@ check_diff()
     if cmp "$1" "$2" > /dev/null; then
         return "$TRUE"
     else
-        # If this is the first step that failed in this test,
-        # show tor's logs
-        if test -z "$NEXT_TEST"; then
-           fail_printf "'%s': Tor said%s:" \
-                       "$1" \
-                       "$CONTEXT"
-           log_verify_config "$3" \
-                             "$4" \
-                             "$5"
-        fi
-        fail_printf "'%s' did not match%s:" \
+        fail_printf "'%s': Tor --dump-config said%s:\\n%s" \
                     "$1" \
-                    "$CONTEXT"
+                    "$CONTEXT" \
+                    "$7"
         diff -u "$1" "$2" >&2 \
             || true
+        log_verify_config "$3" \
+                          "$4" \
+                          "$5"
         return "$FALSE"
     fi
 }
@@ -372,6 +384,8 @@ check_dump_config()
 {
     OUTPUT="$4"
     OUTPUT_RAW="${OUTPUT}_raw"
+
+    FULL_TOR_CMD=
     dump_config "$1" \
                 "$2" \
                 "$3" \
@@ -389,8 +403,8 @@ check_dump_config()
                   "$1" \
                   "$2" \
                   "$3" \
-                  "$5" \
-                  "$6"; then
+                  "$6" \
+                  "$FULL_TOR_CMD"; then
         return "$TRUE"
     else
         return "$FALSE"
@@ -416,11 +430,21 @@ check_empty_pattern()
 # be $EMPTY. Pass tor the extra command line arguments $3, which will be
 # passed unquoted. Send tor's standard output to $4.
 #
+# Set $FULL_TOR_CMD to the tor command line that was executed.
+#
 # If tor's exit status does not match the boolean $5, fail_printf()
 # using the file name $6, and context $7, which is required.
 verify_config()
 {
     RESULT=$TRUE
+
+    # keep the command we're about to execute, and show if it we fail
+    FULL_TOR_CMD=$(printf "$ %s %s %s %s %s %s %s" \
+    "$TOR_BINARY" --verify-config \
+                  -f "$1" \
+                  --defaults-torrc "$2" \
+                  "$3"
+             )
     # We need cmdline unquoted
     # shellcheck disable=SC2086
     "$TOR_BINARY" --verify-config \
@@ -431,9 +455,11 @@ verify_config()
 
     # Convert the actual and expected results to boolean, and compare
     if test $((! (! RESULT))) -ne $((! (! $5))); then
-        fail_printf "'%s': Tor --verify-config did not %s." \
+        fail_printf "'%s': Tor --verify-config did not %s:\\n%s" \
                     "$6" \
-                    "$7"
+                    "$7" \
+                    "$FULL_TOR_CMD"
+        cat "$4" >&2
     fi
 }
 
@@ -445,15 +471,17 @@ verify_config()
 # Log the pattern, and the entire contents of the output file.
 #
 # Log failure messages using fail_printf(), with the match file name,
-# and context $3, which is required.
+# context $3, and tor command line $4, which are required.
 check_pattern()
 {
     expect_log="$(cat "$1")"
     if ! grep "$expect_log" "$2" > /dev/null; then
-        fail_printf "Expected %s '%s':\\n%s\\nTor said:" \
+        fail_printf "Expected %s '%s':\\n%s" \
                     "$3" \
                     "$1" \
                     "$expect_log"
+        printf "Tor --verify-config said:\\n%s\\n" \
+               "$4" >&2
         cat "$2" >&2
     fi
 }
@@ -479,6 +507,7 @@ check_verify_config()
         return
     fi
 
+    FULL_TOR_CMD=
     verify_config "$1" \
                   "$2" \
                   "$3" \
@@ -489,7 +518,8 @@ check_verify_config()
 
     check_pattern "$6" \
                   "$4" \
-                  "$7"
+                  "$7" \
+                  "$FULL_TOR_CMD"
 }
 
 for dir in "${EXAMPLEDIR}"/*; do
@@ -591,7 +621,7 @@ for dir in "${EXAMPLEDIR}"/*; do
                           "${DATA_DIR}/output_log.${testname}" \
                           "$TRUE" \
                           "$EXPECTED_LOG" \
-                          "log ok"
+                          "log success"
         fi
 
    elif test -f "$ERROR"; then
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    14 Nov '19
                    
                        commit a5628cf5b318a1168d5092e26a79a7d876aa0b28
Author: teor <teor(a)torproject.org>
Date:   Wed Nov 13 17:12:30 2019 +1000
    test/parseconf: Refactor and simplify, stage 2
    
    Remove more duplicate code.
    Eliminate some arguments.
    Rewrite some comments.
    
    Cleanup after 32451.
---
 src/test/test_parseconf.sh | 202 ++++++++++++++++++++++++++-------------------
 1 file changed, 117 insertions(+), 85 deletions(-)
diff --git a/src/test/test_parseconf.sh b/src/test/test_parseconf.sh
index edda6c3ef..816ed97e3 100755
--- a/src/test/test_parseconf.sh
+++ b/src/test/test_parseconf.sh
@@ -264,11 +264,10 @@ log_verify_config()
 
 # Run "tor --dump-config short" on the torrc $1, and defaults torrc $2, which
 # may be $EMPTY. Pass tor the extra command line arguments $3, which will be
-# passed unquoted.
-# Send the standard output to $4.
+# passed unquoted. Send tor's standard output to $4.
+#
 # If tor fails, fail_printf() using the file name $5, and context $6,
-# which may be an empty string. Then run "tor --verify-config", and log tor's
-# error messages to stderr.
+# which may be an empty string. Then run log_verify_config().
 dump_config()
 {
     if test "$6"; then
@@ -313,21 +312,21 @@ filter()
                        "$CONTEXT"
 }
 
-# Compare the input file $1, and output file $2.
+# Compare the expected file $1, and output file $2.
 #
 # If they are different, fail. If this is the first step that failed in this
-# test, run log_verify_config with torrc $3, defaults torrc $4, and command
+# test, run log_verify_config() with torrc $3, defaults torrc $4, and command
 # line $5, to log Tor's error messages. Finally, log the differences between
 # the files.
 #
 # If the file contents are identical, returns true. Otherwise, return false.
 #
-# Log failure messages using fail_printf(), with the file name $6, and
-# context $7, which may be an empty string.
+# Log failure messages using fail_printf(), with the expected file name, and
+# context $6, which may be an empty string.
 check_diff()
 {
-    if test "$7"; then
-        CONTEXT=" $=7"
+    if test "$6"; then
+        CONTEXT=" $=6"
     else
         CONTEXT=""
     fi
@@ -339,14 +338,14 @@ check_diff()
         # show tor's logs
         if test -z "$NEXT_TEST"; then
            fail_printf "'%s': Tor said%s:" \
-                       "$6" \
+                       "$1" \
                        "$CONTEXT"
            log_verify_config "$3" \
                              "$4" \
                              "$5"
         fi
         fail_printf "'%s' did not match%s:" \
-                    "$6" \
+                    "$1" \
                     "$CONTEXT"
         diff -u "$1" "$2" >&2 \
             || true
@@ -354,6 +353,50 @@ check_diff()
     fi
 }
 
+# Run "tor --dump-config short" on the torrc $1, and defaults torrc $2, which
+# may be $EMPTY. Pass tor the extra command line arguments $3, which will be
+# passed unquoted. Send tor's standard output to $4, after running $FILTER
+# on it.
+#
+# If tor fails, run log_verify_config().
+#
+# Compare the expected file $5, and output file. If they are different, fail.
+# If this is the first step that failed in this test, run log_verify_config().
+#
+# If the file contents are identical, returns true. Otherwise, return false,
+# and log the differences between the files.
+#
+# Log failure messages using fail_printf(), with the expected file name, and
+# context $6, which may be an empty string.
+check_dump_config()
+{
+    OUTPUT="$4"
+    OUTPUT_RAW="${OUTPUT}_raw"
+    dump_config "$1" \
+                "$2" \
+                "$3" \
+                "$OUTPUT_RAW" \
+                "$5" \
+                "$6"
+
+    filter "$OUTPUT_RAW" \
+           "$OUTPUT" \
+           "$5" \
+           "$6"
+
+    if check_diff "$5" \
+                  "$OUTPUT" \
+                  "$1" \
+                  "$2" \
+                  "$3" \
+                  "$5" \
+                  "$6"; then
+        return "$TRUE"
+    else
+        return "$FALSE"
+    fi
+}
+
 # Check if $1 is an empty file.
 # If it is, fail_printf() using $2 as the type of file.
 # Returns true if the file is empty, false otherwise.
@@ -371,8 +414,8 @@ check_empty_pattern()
 
 # Run tor --verify-config on the torrc $1, and defaults torrc $2, which may
 # be $EMPTY. Pass tor the extra command line arguments $3, which will be
-# passed unquoted.
-# Send tor's standard output to $4.
+# passed unquoted. Send tor's standard output to $4.
+#
 # If tor's exit status does not match the boolean $5, fail_printf()
 # using the file name $6, and context $7, which is required.
 verify_config()
@@ -394,14 +437,15 @@ verify_config()
     fi
 }
 
-# Check for the pattern in file $1, in the lines in the output file $2.
-# Uses grep with the entire contents of $1 as the pattern. (Not "grep -f".)
+# Check for the patterns in the match file $1, in the output file $2.
+# Uses grep with the entire contents of the match file as the pattern.
+# (Not "grep -f".)
 #
 # If the pattern does not match any lines in the output file, fail.
 # Log the pattern, and the entire contents of the output file.
 #
-# Log failure messages using fail_printf(), with the file name $1, and
-# context $3, which is required.
+# Log failure messages using fail_printf(), with the match file name,
+# and context $3, which is required.
 check_pattern()
 {
     expect_log="$(cat "$1")"
@@ -414,6 +458,40 @@ check_pattern()
     fi
 }
 
+# Run tor --verify-config on the torrc $1, and defaults torrc $2, which may
+# be $EMPTY. Pass tor the extra command line arguments $3, which will be
+# passed unquoted. Send tor's standard output to $4.
+#
+# If tor's exit status does not match the boolean $5, fail.
+#
+# Check for the patterns in the match file $6, in the output file.
+# Uses grep with the entire contents of the match file as the pattern.
+# (Not "grep -f".) The match file must not be empty.
+#
+# If the pattern does not match any lines in the output file, fail.
+# Log the pattern, and the entire contents of the output file.
+#
+# Log failure messages using fail_printf(), with the match file name,
+# and context $7, which is required.
+check_verify_config()
+{
+    if check_empty_pattern "$6" "$7"; then
+        return
+    fi
+
+    verify_config "$1" \
+                  "$2" \
+                  "$3" \
+                  "$4" \
+                  "$5" \
+                  "$6" \
+                  "$7"
+
+    check_pattern "$6" \
+                  "$4" \
+                  "$7"
+}
+
 for dir in "${EXAMPLEDIR}"/*; do
     NEXT_TEST=
 
@@ -489,89 +567,43 @@ for dir in "${EXAMPLEDIR}"/*; do
     elif test -f "$EXPECTED"; then
         # This case should succeed: run dump-config and see if it does.
 
-        if test -f "$EXPECTED_LOG"; then
-            if check_empty_pattern "$EXPECTED_LOG" "Expected log"; then
-                continue
-            fi
-        fi
-
-        dump_config "./torrc" \
-                    "$DEFAULTS" \
-                    "$CMDLINE" \
-                    "${DATA_DIR}/output_raw.${testname}" \
-                    "$EXPECTED" \
-                    ""
-
-        filter "${DATA_DIR}/output_raw.${testname}" \
-               "${DATA_DIR}/output.${testname}" \
-               "$EXPECTED" \
-               ""
-
-        if check_diff "$EXPECTED" \
-                      "${DATA_DIR}/output.${testname}" \
-                      "./torrc" \
-                      "$DEFAULTS" \
-                      "$CMDLINE" \
-                      "$EXPECTED" \
-                      ""; then
+        if check_dump_config "./torrc" \
+                             "$DEFAULTS" \
+                             "$CMDLINE" \
+                             "${DATA_DIR}/output.${testname}" \
+                             "$EXPECTED" \
+                             ""; then
             # Check round-trip.
-            dump_config "${DATA_DIR}/output.${testname}" \
-                        "$EMPTY" \
-                        "" \
-                        "${DATA_DIR}/output_2_raw.${testname}" \
-                        "$EXPECTED" \
-                        "on round-trip"
-
-            filter "${DATA_DIR}/output_2_raw.${testname}" \
-                   "${DATA_DIR}/output_2.${testname}" \
-                   "$EXPECTED" \
-                   "on round-trip"
-
-            check_diff "${DATA_DIR}/output.${testname}" \
-                       "${DATA_DIR}/output_2.${testname}" \
-                       "${DATA_DIR}/output.${testname}" \
-                       "$EMPTY" \
-                       "" \
-                       "$EXPECTED" \
-                       "on round-trip" || true
+            check_dump_config "${DATA_DIR}/output.${testname}" \
+                              "$EMPTY" \
+                              "" \
+                              "${DATA_DIR}/output_2.${testname}" \
+                              "$EXPECTED" \
+                              "on round-trip" || true
         fi
 
         if test -f "$EXPECTED_LOG"; then
             # This case should succeed: run verify-config and see if it does.
 
-            verify_config "./torrc" \
+            check_verify_config "./torrc" \
                           "$DEFAULTS" \
                           "$CMDLINE" \
                           "${DATA_DIR}/output_log.${testname}" \
                           "$TRUE" \
                           "$EXPECTED_LOG" \
-                          "succeed"
-
-            check_pattern "$EXPECTED_LOG" \
-                          "${DATA_DIR}/output_log.${testname}" \
-                          "log"
+                          "log ok"
         fi
 
    elif test -f "$ERROR"; then
         # This case should fail: run verify-config and see if it does.
 
-        if ! test -s "$ERROR"; then
-            if check_empty_pattern "$ERROR" "Error"; then
-                continue
-            fi
-        fi
-
-        verify_config "./torrc" \
-                      "$DEFAULTS" \
-                      "$CMDLINE" \
-                      "${DATA_DIR}/output.${testname}" \
-                      "$FALSE" \
-                      "$ERROR" \
-                      "report an error"
-
-        check_pattern "$ERROR" \
-                      "${DATA_DIR}/output.${testname}" \
-                      "error"
+        check_verify_config "./torrc" \
+                            "$DEFAULTS" \
+                            "$CMDLINE" \
+                            "${DATA_DIR}/output.${testname}" \
+                            "$FALSE" \
+                            "$ERROR" \
+                            "log error"
     else
         # This case is not actually configured with a success or a failure.
         # call that an error.
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0