[Chicago] Better than grep

Brian Herman brianherman at gmail.com
Mon Jun 28 18:18:59 CEST 2010


Dear user groups,
Its in perl and can tackle large heterogeneous source trees in a single
command!
Even though it is perl it acts like the famous import this line:

Simple is better than complex.

For example one command in my local source repository of the
etherpad<http://etherpad.org> open
source project.
> ack admin



OUTPUT

trunk/etherpad/pad/debian/config
40:db_input high "etherpad/admin_password" || true

trunk/etherpad/pad/debian/postinst
38:db_get "etherpad/admin_password"
39:db_admin_password="$RET"
71: -D __db_admin_password__="$db_admin_password" \

trunk/etherpad/pad/etherpad/etc/etherpad.localdev-default.properties
5:etherpad.adminPass = password

trunk/etherpad/pad/etherpad/src/etherpad/admin/shell.js
123:  body.push(A({href: '/ep/admin/'}, html("&laquo; Admin")));

trunk/etherpad/pad/etherpad/src/etherpad/billing/team_billing.js
417:    billingAdminLink: "https://"+subDomain+".
etherpad.com/ep/admin/billing/"

trunk/etherpad/pad/etherpad/src/etherpad/control/admin/pluginmanager.js
28:import("etherpad.admin.plugins");
61:  renderHtml("admin/pluginmanager.ejs",

trunk/etherpad/pad/etherpad/src/etherpad/control/admincontrol.js
37:import("etherpad.admin.shell");
54:import("etherpad.admin.plugins");
55:import("etherpad.control.admin.pluginmanager");
69:  return (getSession().adminAuth === true);
102:    response.redirect('/ep/admin/auth');
110:    [PrefixMatcher('/ep/admin/pluginmanager/'), forward(pluginmanager)],
111:    [PrefixMatcher('/ep/admin/usagestats/'), forward(statscontrol)]
134:      P("Are you an admin?"),
142:    if (pass === appjet.config['etherpad.adminPass']) {
143:      getSession().adminAuth = true;
147:        response.redirect("/ep/admin/main");
166:  plugins.callHook("adminMenu").forEach(addMenuItem);
170:    div.push(P(A({href: "/ep/admin/setadminmode?v=false"},
174:    div.push(P(A({href: "/ep/admin/setadminmode?v=true"},
211:  body.push(A({href: '/ep/admin/'}, html("&laquo; Admin")));
255:// Note: This function is called by the PNE dashboard
(pro_admin_control.js)!  Be careful.
283:// Note: This function is called by the PNE dashboard
(pro_admin_control.js)!  Be careful.
320:// Note: This function is called by the PNE dashboard
(pro_admin_control.js)!  Be careful.
355:// Note: This function is called by the PNE dashboard
(pro_admin_control.js)!  Be careful.
667:  response.write(P(A({href: '/ep/admin/timingsreset'}, "reset all")));
703:  response.redirect('/ep/admin/timings');
1235:      tr.push(TD(A({href:
'/ep/admin/pne-tracker-lookup-keyhash?hash='+d.keyHash}, d.keyHash)));
1325:    P(FORM({action: '/ep/admin/beta-valve-toggle', method: "post"},
1344:  d.push(FORM({action: '/ep/admin/beta-invite-multisend', method:
'post'},
1359:      tr.push(TD(FORM({action: '/ep/admin/beta-invite-send', method:
'post'},
1373:  response.redirect('/ep/admin/beta-valve');
1379:  response.redirect('/ep/admin/beta-valve');
1397:  response.redirect('/ep/admin/beta-valve');
1401:  response.redirect("/ep/admin/usagestats/");
1408:function render_setadminmode() {
1411:  response.redirect("/ep/admin/");
1453:      var admins = pro_accounts.listAllDomainAdmins(domain.id);
1454:      body.push(P("Domain ", domain.subDomain, ".", request.domain, ";
admins:"));
1456:      admins.forEach(function(admin) {
1457:        p.push(LI(admin.fullName, " <", admin.email, ">"));

trunk/etherpad/pad/etherpad/src/etherpad/control/pad/pad_control.js
705:            "If you have forgotten a pad's password, contact your site
administrator.",
706:            " Site administrators can recover lost pad text through the
\"Admin\" tab.")

trunk/etherpad/pad/etherpad/src/etherpad/control/pro/account_control.js
290:// create-admin-account (eepnet only)
293:function render_create_admin_account_get() {
295:    renderFramedError("An admin account already exists on this
domain.");
298:  _renderTemplate('create-admin-account', {});
301:function render_create_admin_account_post() {

trunk/etherpad/pad/etherpad/src/etherpad/control/pro/admin/account_manager_control.js
26:import("etherpad.control.pro.admin.pro_admin_control");
83:  pro_admin_control.renderAdminPage('account-manager', {
91:  pro_admin_control.renderAdminPage('new-account', {
110:      A({href: "/ep/admin/billing/", id: "billinglink"}, "Manage
billing")));
116:    response.redirect('/ep/admin/account-manager/');
155:  response.redirect('/ep/admin/account-manager/');
165:    adminAccount: getSessionProAccount(),
177:               A({href: '/ep/admin/pne-config'}, "Configured SMTP on
this server", "?")));
190:  pro_admin_control.renderAdminPage('manage-account', {
199:    response.redirect('/ep/admin/account-manager/');
209:    _err("You cannot remove your own administrator privileges.");
223:  response.redirect('/ep/admin/account-manager/');
232:  pro_admin_control.renderAdminPage('delete-account', {
240:    response.redirect("/ep/admin/account-manager/account/"+accountId);
245:    response.redirect("/ep/admin/account-manager/account/"+accountId);
256:  response.redirect("/ep/admin/account-manager/");

trunk/etherpad/pad/etherpad/src/etherpad/control/pro/admin/license_manager_control.js
25:import("etherpad.control.pro.admin.pro_admin_control");
34:  return '/ep/admin/pne-license-manager/';
57:  pro_admin_control.renderAdminPage('pne-license-manager',
76:  pro_admin_control.renderAdminPage('pne-license-manager',

trunk/etherpad/pad/etherpad/src/etherpad/control/pro/admin/pro_admin_control.js
22:import("etherpad.control.admincontrol");
23:import("etherpad.control.pro.admin.license_manager_control");
24:import("etherpad.control.pro.admin.account_manager_control");
25:import("etherpad.control.pro.admin.pro_config_control");
26:import("etherpad.control.pro.admin.team_billing_control");
30:import("etherpad.admin.shell");
40:var _pathPrefix = '/ep/admin/';
113:  appjet.requestCache.proTopNavSelection = 'admin';
118:      return renderTemplateAsString('pro/admin/'+p+'.ejs', data);
121:  renderFramed('pro/admin/admin-template.ejs', {
134:    [DirMatcher('/ep/admin/account-manager/'),
forward(account_manager_control)],
135:    [DirMatcher('/ep/admin/pro-config/'), forward(pro_config_control)],
136:    [DirMatcher('/ep/admin/billing/'), forward(team_billing_control)],
148://  renderAdminPage('admin');
149:  response.redirect('/ep/admin/account-manager/')
154:    renderUptime: admincontrol.renderServerUptime,
155:    renderResponseCodes: admincontrol.renderResponseCodes,
156:    renderPadConnections: admincontrol.renderPadConnections,
157:    renderTransportStats: admincontrol.renderCometStats,
170:  'etherpad.adminPass',
191:  response.redirect("/ep/admin/shell");
198:  appjet.requestCache.proTopNavSelection = 'admin';

trunk/etherpad/pad/etherpad/src/etherpad/control/pro/admin/pro_config_control.js
20:import("etherpad.control.pro.admin.pro_admin_control");
40:  pro_admin_control.renderAdminPage('pro-config', {

trunk/etherpad/pad/etherpad/src/etherpad/control/pro/admin/team_billing_control.js
28:import("etherpad.control.pro.admin.pro_admin_control");
144:  pro_admin_control.renderAdminPage('manage-billing', {
192:  response.redirect('/ep/admin/billing/edit');
335:    response.redirect('/ep/admin/billing/');
341:    response.redirect('/ep/admin/billing')
394:    response.redirect("/ep/admin/billing/");
430:    pro_admin_control.renderAdminPage('single-invoice', {
440:    pro_admin_control.renderAdminPage('billing-invoices', {

trunk/etherpad/pad/etherpad/src/etherpad/control/pro/pro_main_control.js
35:import("etherpad.control.pro.admin.pro_admin_control");
36:import("etherpad.control.pro.admin.account_manager_control");
46:    [DirMatcher('/ep/admin/'), forward(pro_admin_control)],
141:  var adminList = pro_accounts.listAllDomainAdmins();
146:    adminList: adminList

trunk/etherpad/pad/etherpad/src/etherpad/control/pro_signup_control.js
31:import("etherpad.control.pro.admin.account_manager_control");

trunk/etherpad/pad/etherpad/src/etherpad/control/static_control.js
22:import("etherpad.admin.plugins");

trunk/etherpad/pad/etherpad/src/etherpad/control/statscontrol.js
755://   body.push(A({id: "backtoadmin", href: "/ep/admin/"},
html("&laquo;"), " back to admin"));
772://   helpers.includeCss('admin/admin-stats.css');
804:      links.push(toHTML(A({href:
"/ep/admin/usagestats/data?statName="+statName}, statName)));
879://         A({href:
'/ep/admin/usagestats/graph?size=1080x420&statName='+statName},
880://                IMG({src:
'/ep/admin/usagestats/graph?size=400x200&statName='+statName,
885://                     href:
'/ep/admin/usagestats/data?statName='+statName}, "(data)")))
962://     body.push(P(A({href: "/ep/admin/usagestats/?cat="+catname},
catname)));
1131://     div.push(A({href:
'/ep/admin/usagestats/graph?size=1080x420&statName='+statName},
1132://                IMG({src:
'/ep/admin/usagestats/graph?size=400x200&statName='+statName,
1137://                     href:
'/ep/admin/usagestats/data?statName='+statName}, "(data)")));
1184://   response.redirect('/ep/admin/usagestats');

trunk/etherpad/pad/etherpad/src/etherpad/control/store/storecontrol.js
28:import("etherpad.control.pro.admin.team_billing_control");

trunk/etherpad/pad/etherpad/src/etherpad/importexport/importexport.js
144:    return "EtherPad is not configured to import or export formats other
than <strong>txt</strong> and <strong>html</strong>. Please contact your
system administrator for details.";

trunk/etherpad/pad/etherpad/src/etherpad/pad/model.js
33:import("etherpad.admin.plugins");

trunk/etherpad/pad/etherpad/src/etherpad/pad/pad_security.js
114:  if (!isProDomainRequest() && (request.path ==
"/ep/admin/padinspector")) {
222:  if (stringutils.startsWith(request.path, "/ep/admin/recover-padtext"))
{

trunk/etherpad/pad/etherpad/src/etherpad/pne/pne_utils.js
126:  'etherpad.adminPass',

trunk/etherpad/pad/etherpad/src/etherpad/pro/pro_accounts.js
129:  _withCache('does-domain-admin-exist', function(cache) {
143:               admin: isAdmin});
206:              admin: account.isAdmin,
214:  return _withCache('does-domain-admin-exist', function(cache) {
217:      var admins = sqlobj.selectMulti('pro_accounts', {domainId:
domainId, isAdmin: true}, {});
218:      cache[domainId] = (admins.length > 0);
348:    return "LDAP not yet configured. Please contact your system
admininstrator.";
353:    return getLDAP().error + " Please contact your system
administrator.";
545:  _withCache('does-domain-admin-exist', function(cache) {

trunk/etherpad/pad/etherpad/src/etherpad/pro/pro_ldap_support.js
196://   "principal"    : "uid=admin,ou=system",

trunk/etherpad/pad/etherpad/src/etherpad/pro/pro_pad_db.js
89:// Not a normal part of the UI.  This is only called from admin
interface,
110:    return; // etherpad admins

trunk/etherpad/pad/etherpad/src/etherpad/pro/pro_padlist.js
180:            // excludes etherpad admin user

trunk/etherpad/pad/etherpad/src/etherpad/pro/pro_quotas.js
106:    notice.push("  ", A({href: "/ep/admin/billing/"}, "Manage billing"),
".");
110:      A({href: "/ep/payment-required"}, "contact a site administrator"),
".");
132:       startsWith(request.path, "/ep/admin/") ||

trunk/etherpad/pad/etherpad/src/etherpad/pro/pro_utils.js
99:  // if it's PNE and there is no admin account, allow them to create an
admin
107:    if (request.path != '/ep/account/create-admin-account') {
109:      response.redirect('/ep/account/create-admin-account');

trunk/etherpad/pad/etherpad/src/etherpad/utils.js
38:import("etherpad.admin.plugins");

trunk/etherpad/pad/etherpad/src/main.js
37:import("etherpad.control.admincontrol");
47:import("etherpad.control.pro.admin.license_manager_control");
71:import("etherpad.admin.plugins");
317:    '/ep/admin',      // pro and main site
393:    [DirMatcher('/ep/admin/'), forward(admincontrol)],

trunk/etherpad/pad/etherpad/src/static/css/admin/admin-stats.css
1:#backtoadmin {

trunk/etherpad/pad/etherpad/src/static/css/pro/pro-admin.css
2:/* admin leftnav */
5:#admin-layout-table {
9:#admin-layout-table td {
12:#admin-leftnav {
20:#admin-leftnav .leftnav-title {
24:#admin-leftnav ul {
29:#admin-leftnav ul ul {
33:#admin-leftnav li {
39:#admin-leftnav li a {
45:#admin-leftnav li a:hover {
50:#admin-leftnav li.selected a {
57:/* admin content area */
60:#admin-right {
64:#admin-right h3 {
72:#admin-right h3.top {

trunk/etherpad/pad/etherpad/src/static/js/pad_impexp.js
152:          " system administrator for details.");

trunk/etherpad/pad/infrastructure/ace/www/domline.js
2:// %APPJET%: import("etherpad.admin.plugins");

trunk/etherpad/pad/infrastructure/ace/www/linestylefilter.js
3:// %APPJET%: import("etherpad.admin.plugins");

trunk/etherpad/pad/infrastructure/framework-src/modules/dispatch.js
38:// Like PrefixMatcher, but makes trailing '/' optional, as in /ep/admin
or /ep/admin/.

Thanks,
Brian Herman

brianjherman.com
Research Assistant
University Of Illinois at Chicago
brianherman at acm.org
Consultant
University of Chicago
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/chicago/attachments/20100628/29132f3b/attachment-0001.html>


More information about the Chicago mailing list