[PATCH v3 3/4] help.c - group common commands by theme

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When 'git help' is called, a list of common commands are printed:

The most commonly used git commands are:
   add        Add file contents to the index
   bisect     Find by binary search the change that introduced a bug
   branch     List, create, or delete branches
   checkout   Checkout a branch or paths to the working tree
   clone      Clone a repository into a new directory
   commit     Record changes to the repository
   [...]

Instead of a less than optimal alphabetical order, print those
commands in theme-related groups:

The most commonly used git commands are:
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index
   [...]

To achieve this, qsort the common_cmds array by group name,
then print those common commands, skipping a line between each group.

Signed-off-by: Sébastien Guimmara <sebastien.guimmara@xxxxxxxxx>
---
 help.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/help.c b/help.c
index 2072a87..2169a59 100644
--- a/help.c
+++ b/help.c
@@ -218,17 +218,38 @@ void list_commands(unsigned int colopts,
 	}
 }
+/* sort the command name struct by group name */
+int cmd_group_cmp(const void *elem1, const void *elem2)
+{
+	struct cmdname_help *cmd1 = (struct cmdname_help*) elem1;
+	struct cmdname_help *cmd2 = (struct cmdname_help*) elem2;
+
+	return strcmp(cmd1->group, cmd2->group);
+}
+
 void list_common_cmds_help(void)
 {
 	int i, longest = 0;
+	char *current_grp = NULL;
for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
 		if (longest < strlen(common_cmds[i].name))
 			longest = strlen(common_cmds[i].name);
 	}
+ /* sort common commands by group (i.e, beginner's relevance) */
+	qsort(common_cmds, ARRAY_SIZE(common_cmds),
+		sizeof(struct cmdname_help), cmd_group_cmp);
+
 	puts(_("The most commonly used git commands are:"));
 	for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
+
+		/* skip a line each time we encounter a new command group */
+		if (current_grp != NULL && strcmp(common_cmds[i].group, current_grp))
+			printf("\n");
+
+		current_grp = common_cmds[i].group;
+
 		printf("   %s   ", common_cmds[i].name);
 		mput_char(' ', longest - strlen(common_cmds[i].name));
 		puts(_(common_cmds[i].help));
--
2.4.0

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]