tree checksum vpatch file split hunks

all signers: lobbes bvt diana_coman asciilifeform

antecedents: logotron_genesis.kv sept_fixes.kv hide_inactive.kv

press order:

logotron_genesis.kvasciilifeform diana_coman
multsel_and_datefix.kvasciilifeform diana_coman
raw_line_export.kvasciilifeform diana_coman
rle_errata.kvasciilifeform diana_coman
irssi2tmsr.kvasciilifeform diana_coman
uniturds_etc.kvasciilifeform diana_coman
line_wraps.kvasciilifeform diana_coman
znc2tmsr_etc.kvasciilifeform diana_coman lobbes
uptimefix_bye_cache.kvasciilifeform diana_coman lobbes
raw_line_fix.kvasciilifeform diana_coman lobbes
irssi_format.kvasciilifeform diana_coman
sept_fixes.kvasciilifeform diana_coman
active_disconnect_r3.kvasciilifeform bvt diana_coman
sept_errata.kvasciilifeform
detect_disconnect.kvasciilifeform
shlex_removal.kvasciilifeform
hide_inactive.kvasciilifeform
search_all_chans.kvasciilifeform

patch:

- D842B46BD643A09C4561676285EC2CD921368026994849F0E771B040A090A144A2749FB3DFAD53942AA7D55D3D92037B60E771BF95358A07AFF7AD7CFB775AFC
+ 9B223E8847A05C7DEE552A786D8290316BF1DBF3DFCA3CE7BC2080EC7B357B5C031FABC47D2586097E8F1BB0100A0E6F6C44C37ACF53AA3D3FE903FF074FCD67
logotron/MANIFEST.TXT
(15 . 3)(15 . 4)
5 597858 detect_disconnect asciilifeform "Adjustable detector of bot disconnection."
6 598372 shlex_removal asciilifeform "Reverted defective attempt at double-quoted search."
7 640165 hide_inactive asciilifeform "Configurable default-hide of idle chans"
8 641046 search_all_chans asciilifeform "Button to search in all logged chans"
- 41B2D77F5049BCF7C65DBA41E46DC5464B27DA3F947CECBA3F3BD1ED451B2D469BF550155EC6EFB49E52BEA0A6467F9D5EEE7B5298E2396C39A64390711B6ACE
+ 0A75AB02402BD83BDA90E41A341753044860EB7E0013943687B0B0797356E8D9E21BA4346A71123357D791CE422ECF789A29AD8EA759BC8799F88C54CA7E66D3
logotron/README.txt
(119 . 6)(119 . 9)
13
14 Still needs a variant of 'eater' that will eat these.
15
16 ###############
17 Oct. 4 Update:
18 ###############
19
20 (1) WWW: Removed ill-conceived 'Tape' knob.
21 (2) Bot: Added silent-disconnection detector.
(134 . 10)(137 . 17)
23
24 To disable forced disconnects, set disc_t to zero.
25
26 #################
27 Jul. 2020 Update:
28 #################
29 ####################
30 Jul. 2020 Update #1:
31 ####################
32
33 (1) Hide by default chans where no activity in days_hide day (set in config.)
34 (2) Added 'join as guest' link (via 'kiwi' wwwtronic IRC client)
35 (3) Example Apache-WSGI configs.
36
37 ####################
38 Jul. 2020 Update #2:
39 ####################
40
41 (1) Fix unclosed 'table' tag from earlier.
42 (2) 'Search all chans' button.
- 8AC522F24E0ADD9BA37C81161EDBB0BA5FE70DF54C03E73FC8A6A60BAC3BF993D1530088C5A3A8A7CAA90DB67EE6B3CDAE75A15B4C6D698ED3D95AFF12E54626
+ 3B5645290A520A3F935B44372A1C98F60A0BC967EA3D6AD4160EF72E455C7C9636847847007334053703765FA80176A2509E3609005E4AB8D2518D27869F8002
logotron/reader.py
(101 . 22)(101 . 6)
47 if (DB_DEBUG): print "query res: '{0}'".format(rv)
48 return rv
49
50 def exec_db(query, args=()):
51 cur = get_db().cursor(cursor_factory=psycopg2.extras.RealDictCursor)
52 if (DB_DEBUG): print "query: '{0}'".format(query)
53 if (DB_DEBUG): print "args: '{0}'".format(args)
54 if (DB_DEBUG): print "EXEC:"
55 cur.execute(query, args)
56
57 def getlast_db():
58 cur = get_db().cursor(cursor_factory=psycopg2.extras.RealDictCursor)
59 cur.execute('select lastval()')
60 return cur.fetchone()['lastval']
61
62 def commit_db():
63 cur = get_db().cursor(cursor_factory=psycopg2.extras.RealDictCursor)
64 g.db.commit()
65
66 ##############################################################################
67
68 ## All eggogs redirect to main page
(212 . 7)(196 . 7)
70 if chan_tbl[chan]['show']:
71 s += """<td>{0}</td>""".format(chan_tbl[chan]['time'])
72 # wrap up:
73 s += "</tr>"
74 s += "</tr></table>"
75 return s
76
77
(265 . 7)(249 . 7)
79
80
81 ## Format given log line for display
82 def format_logline(l, highlights = [], select=[]):
83 def format_logline(l, highlights = [], select=[], showchan=False):
84 payload = html_escape(l['payload'])
85
86 # Format ordinary links:
(296 . 6)(280 . 9)
88 speaker = l['speaker']
89 separator = ":"
90
91 if showchan:
92 speaker = '<small>(' + l['chan'] + ')</small> ' + speaker
93
94 # If 'action', annotate:
95 if l['self']:
96 separator = ""
(485 . 10)(472 . 26)
98 query = request.args.get('q', default = '', type = str)
99 # page_num = request.args.get('page', default = 0, type = int)
100
101 # Handle rubbish chan:
102 if chan not in Channels:
103 return redirect(url_for('log'))
104 # channels to search in
105 chans = []
106
107 # whether to indicate chan per log line
108 showchan = False
109
110 if chan == 'all':
111 # search in all logged channels
112 chans = Channels
113 legend = "<i>all logged channels</i>"
114 showchan = True
115 else:
116 # Handle possible rubbish chan:
117 if chan not in Channels:
118 return redirect(url_for('log'))
119 else:
120 # search in selected channel only
121 chans = [chan]
122 legend = chan
123
124 nres = 0
125 searchres = []
126 tokens_orig = []
(514 . 17)(517 . 17)
128 # Query is usable; perform the search on DB and get the finds
129 if from_users == []:
130 searchres = query_db(
131 '''select * from loglines where chan=%s
132 and payload ilike all(%s) order by idx desc limit %s;''',
133 [chan,
134 '''select * from loglines where chan = any(%s)
135 and payload ilike all(%s) order by t desc limit %s;''',
136 [(chans,),
137 tokens_formed,
138 Max_Search_Results], one=False)
139 else:
140 searchres = query_db(
141 '''select * from loglines where chan=%s
142 '''select * from loglines where chan = any(%s)
143 and speaker ilike any(%s)
144 and payload ilike all(%s) order by idx desc limit %s;''',
145 [chan,
146 and payload ilike all(%s) order by t desc limit %s;''',
147 [(chans,),
148 from_users,
149 tokens_formed,
150 Max_Search_Results], one=False)
(533 . 7)(536 . 7)
152 # Number of entries found
153 nres = len(searchres)
154 search_head = "<b>{0}</b> entries found in {1} for <b>'{2}'</b> :".format(
155 nres, chan, html_escape(query))
156 nres, legend, html_escape(query))
157
158 # No paging support just yet:
159 return render_template('searchres.html',
(542 . 8)(545 . 8)
161 chan = chan,
162 search_head = search_head,
163 tokens = tokens_orig,
164 loglines = searchres)
165
166 loglines = searchres,
167 showchan = showchan)
168
169 # Comment this out if you don't have one
170 @app.route('/favicon.ico')
- 7260E8531EEE1E629D3BD793931237B759CCD829F1D5F5A929EF3375897EE7A5D21562E870142C24D5F3BAFB44F7D7B83B1952C8FDD8554A2E8F55633F10D54C
+ C65B0971E605CBF05445F2562F4E363BFBFAC914D389D81F946FD534E79FF3BA4B00245536FBFBAA3527127A4DEC005FBE1C3242182C76C47112498CEF0505D6
logotron/templates/layout.html
(107 . 13)(107 . 18)
175 <table align="center" style="width:100%">
176 <tr>
177 <td>
178 {% if chan != 'all' %}
179 {{ gen_chanlist( chan, show_all ) | safe }}
180 {% else %}
181 {{ gen_chanlist( chan, True ) | safe }}
182 {% endif %}
183 </td>
184 </tr>
185 </table>
186
187 </p>
188
189 {% if chan != 'all' %}
190 <div align="center">
191 <small>
192 {% if not show_all %}
(127 . 13)(132 . 18)
194 {% endif %}
195 </small>
196 </div>
197 {% endif %}
198
199 <hr>
200
201 <form align="center" id="search" method='get' action='/log-search'><span><a href='/log/{{chan}}'>log</a></span>
202 <form align="center" id="search" method='get' action='/log-search'>
203 <input type='text' name='q' value='{{ query }}' maxlength='2048' spellcheck='false' size='55' value='' />
204 <input type='hidden' name='chan' value='{{chan}}'>
205 <input type='submit' value='search {{chan}}' />
206 <!-- <input type='hidden' name='chan' value='{{chan}}'> -->
207
208 {% if chan != 'all' %}
209 <button type='submit' name='chan' value='{{chan}}'>search {{chan}}</button>
210 {% endif %}
211 <button type='submit' name='chan' value='all'>search all chans</button>
212 </form>
213
214 <hr>
(143 . 7)(153 . 7)
216 <hr>
217
218 <div align="center">
219 <a href="https://kiwiirc.com/nextclient/irc.freenode.net/{{ chan }}">Visit #{{ chan }} as Guest</a> | <a href="/rnd/{{ chan }}">Random({{ chan }})</a> | <a href="{{ url_for('static', filename='log_db.gz') }}">Download hourly DB snapshot</a> | <a href="http://www.loper-os.org/?p=3452">Get Source Code</a>
220 {% if chan != 'all' %}<a href="https://kiwiirc.com/nextclient/irc.freenode.net/{{ chan }}">Visit #{{ chan }} as Guest</a> | <a href="/rnd/{{ chan }}">Random({{ chan }})</a> | {% endif %}<a href="{{ url_for('static', filename='log_db.gz') }}">Download hourly DB snapshot</a> | <a href="http://www.loper-os.org/?p=3452">Get Source Code</a>
221 </div>
222
223 <a name="tail">
- 2A1AF43AB7AA90D58C85B05D4BADF528C9D6AF150C470629AE5394DDC577CAE27FCF42D5527659DF61A73E422AF5BA67AC0AA55AC4022091455E61CF92CE3AF8
+ 1B71B2BB4CDAFD0561FE834175983923A32C5E91729347E894D77AC283A608F4047FA16638D2A949936F40F3A0B5659100B4D6B7DA5260008970B9F99A1F9C81
logotron/templates/log.html
(14 . 7)(14 . 7)
228
229 <div class='loglines'>
230 {% for l in loglines %}
231 {{ format_logline(l, [], sel) | safe }}
232 {{ format_logline(l, [], sel, False) | safe }}
233 {% endfor %}
234 </div>
235
- A60CA105A579ED2B256DBFC92A7CA7468D17BA875A3215217BB1BB2EA15AC04E9E56C66205B1A4387263B068C39F9D72F08E76EDCE2B371F4F1AEBE24BBF7F03
+ 2B005C8DC669CD7229E8A3CB3932D0B53B7E49FE8D1C7E6A5C33192F81E0937F21324307473A24F7670EB3FF82FB2147DAB48B3B8C3E902F25937AFC1DCA5783
logotron/templates/searchres.html
(11 . 7)(11 . 7)
240 <hr>
241
242 {% for l in loglines %}
243 {{ format_logline(l, tokens) | safe }}
244 {{ format_logline(l, tokens, [], showchan) | safe }}
245 {% endfor %}
246
247 {% endblock %}