diff extensions/kwarchive.py @ 109:be4811239acf

kwprint: print example file-dependent keywords also. For a fake file with a fake nodeid print the full keyword list. This can be suppressed with a flag "--no-file".
author Franz Glasner <hg@dom66.de>
date Thu, 16 Aug 2018 17:47:04 +0200
parents aaf84b607154
children 5a86171fab62
line wrap: on
line diff
--- a/extensions/kwarchive.py	Thu Aug 16 17:14:33 2018 +0200
+++ b/extensions/kwarchive.py	Thu Aug 16 17:47:04 2018 +0200
@@ -198,10 +198,12 @@
      ('', "path-filter", "short", _("determine how the path will be printed")),
      ('', "user-filter", "user", _("the part of the user to be printed"), _("USERFILTER")),
      ('', "reST", None, _("output in reST substitution definition syntax")),
+     ('', "no-file", None, _("don't show file-dependent keywords")),
     ] + cmdutil.subrepoopts + cmdutil.walkopts,
     _('[OPTION]...'))
 def kwprint(ui, repo, **opts):
-    '''print the file-independent keywords
+    '''print the file-independent keywords and for an example file-dependent
+    keywords
 
     By default, the revision used is the parent of the working
     directory; use -r/--rev to specify a different revision.
@@ -234,6 +236,9 @@
     in reStructuredText (reST) documents by using it's substitution feature.
     All revision keyword names have a ``VCS`` prefix.
 
+    Use --no-file to suppress the output of file-dependent keywords with an
+    example file.
+
     Returns 0 on success.
 
     '''
@@ -251,11 +256,23 @@
         hgpath=opts.get("path"),
         path_filter=get_checked_path_filter(opts),
         user_filter=get_checked_user_filter(opts))
+    # make file-dependent keywords for an example file
+    file_keywords = make_file_keywords(
+        keywords,
+        "dir1/dir2/test.file",
+        "a4dd6f4b22e11fec41158eec187630c24a43120a")
     for key in sorted(keywords.keys()):
         if opts.get("reST"):
             ui.write(".. |VCS%s| replace:: %s\n" % (key, keywords[key]))
         else:
             ui.write("$%s: %s $\n" % (key, keywords[key]))
+    if not opts.get("no_file"):
+        ui.write("\n")
+        for key in sorted(file_keywords.keys()):
+            if opts.get("reST"):
+                ui.write(".. |VCS%s| replace:: %s\n" % (key, file_keywords[key]))
+            else:
+                ui.write("$%s: %s $\n" % (key, file_keywords[key]))
 
 
 def patch_archiver_class(archivername, filter):
@@ -346,16 +363,7 @@
             except LookupError:
                 nodeid = None
             # file specific keywords
-            file_keywords = {
-                "HGsource": keywords["HGpath"] + '/' + real_name,
-                "Source": real_name,
-                "File": templatefilters.basename(real_name),
-                "Header": "%s %s %s %s" % (real_name, keywords["Revision"], keywords["Date"], keywords["Author"]),
-                "HGid": "%s %s %s %s" % (keywords["HGpath"] + '/' + real_name, keywords["Revision"], keywords["Date"], keywords["Author"]),
-                "HGheader": "%s %s %s %s" % (keywords["HGpath"] + '/' + real_name, keywords["HGrevision"], keywords["Date"], keywords["Author"]),
-                "Id": "%s %s %s %s" % (templatefilters.basename(real_name), keywords["Revision"], keywords["Date"], keywords["Author"]),
-                "HGnodeid": nodeid or "",
-            }
+            file_keywords = make_file_keywords(keywords, real_name, nodeid)
             # This prevents unwanted keyword expansion here
             _MARKER = '$'
             _MARKER_RST = '|'
@@ -440,6 +448,19 @@
     return keywords
 
 
+def make_file_keywords(keywords, real_name, nodeid):
+    return {
+        "HGsource": keywords["HGpath"] + '/' + real_name,
+        "Source": real_name,
+        "File": templatefilters.basename(real_name),
+        "Header": "%s %s %s %s" % (real_name, keywords["Revision"], keywords["Date"], keywords["Author"]),
+        "HGid": "%s %s %s %s" % (keywords["HGpath"] + '/' + real_name, keywords["Revision"], keywords["Date"], keywords["Author"]),
+        "HGheader": "%s %s %s %s" % (keywords["HGpath"] + '/' + real_name, keywords["HGrevision"], keywords["Date"], keywords["Author"]),
+        "Id": "%s %s %s %s" % (templatefilters.basename(real_name), keywords["Revision"], keywords["Date"], keywords["Author"]),
+        "HGnodeid": nodeid or "",
+    }
+
+
 def stripped_hostname(hostname):
     """Return `hostname` without any domain port information"""
     if not hostname: