]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge branch 'refs/heads/t/com_ls_compat'
authorAndre Noll <maan@tuebingen.mpg.de>
Thu, 17 Sep 2015 18:07:02 +0000 (20:07 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Thu, 17 Sep 2015 18:11:36 +0000 (20:11 +0200)
A single commit which adds support for the new syntax for the -l and -s options
of the ls command. These options should now be specified as -l=v rather than
-lv, for example. The old syntax still works, but support will be dropped in
v0.6.0.

* fdb039 Introduce new syntax for com_ls().

1  2 
NEWS
afs.cmd
aft.c

diff --combined NEWS
index 834b61fcb3b1906d88bccaae1eeea18c41fa1149,834b61fcb3b1906d88bccaae1eeea18c41fa1149..758cc3fdfdfe8dfa2817ba6f449c3f545f0bab62
--- 1/NEWS
--- 2/NEWS
+++ b/NEWS
@@@ -4,6 -4,6 +4,9 @@@ NEW
  -----------------------------------------
  current master branch "magnetic momentum"
  -----------------------------------------
++
++Many new features and a lot of other improvements.
++
        - On Linux systems, local sockets are now created in the
          abstract name space by default. This allows to get rid of
          the socket specials in /var/paraslash.
          the background if no log file is given. Instead, all log
          messages go to /dev/null in this case.
        - Web page cleanup.
--
++      - New syntax for the -l and -s options of the ls command.
++        These options should now be specified as -l=v rather than
++        -lv, for example. The old syntax still works, but support
++        will be dropped in v0.6.0.
  
  Download: ./releases/paraslash-git.tar.bz2 (tarball)
  
diff --combined afs.cmd
index bf6482b9719ef2ade361f7a09eb0e19ca604c7a0,fb496aa5a33a383cce141359e49f0a965b117da1..07db3ccb6fadd270a8e2513f0084795e18230acd
+++ b/afs.cmd
@@@ -36,19 -36,20 +36,20 @@@ H: only the tables given by table_name.
  N: ls
  P: AFS_READ
  D: List audio files.
- U: ls [-l[s|l|v|m]] [-p] [-a] [-r] [-d] [-s{p|s|l|n|f|c|i|y|b|d|a}] [pattern...]
+ U: ls [-l=mode] [-p] [-a] [-r] [-d] [-s=order] [pattern...]
  H: Print a list of all audio files matching pattern.
  H:
  H: Options:
  H:
- H: -l Change listing mode. Defaults to short listing if not given.
+ H: -l=mode    Change listing mode. Defaults to short listing if not given.
  H:
- H:    -ls: short listing mode
- H:    -ll: long listing mode (equivalent to -l)
- H:    -lv: verbose listing mode
- H:    -lp: parser-friendly mode
- H:    -lm: mbox listing mode
- H:    -lc: chunk-table listing mode
+ H:    Available modes:
+ H:    s: short listing mode
+ H:    l: long listing mode (equivalent to -l)
+ H:    v: verbose listing mode
+ H:    p: parser-friendly mode
+ H:    m: mbox listing mode
+ H:    c: chunk-table listing mode
  H:
  H: -p List full paths. If this option is not specified, only the basename
  H:    of each file is printed.
@@@ -60,19 -61,20 +61,20 @@@ H: -r      Reverse sort order
  H:
  H: -d Print dates as seconds after the epoch.
  H:
- H: -s Change sort order. Defaults to alphabetical path sort if not given.
- H:
- H:    -sp: by path
- H:    -sl: by last played time
- H:    -ss: by score (implies -a)
- H:    -sn: by num played count
- H:    -sf: by frequency
- H:    -sc: by number of channels
- H:    -si: by image id
- H:    -sy: by lyrics id
- H:    -sb: by bit rate
- H:    -sd: by duration
- H:    -sa: by audio format
+ H: -s=order   Change sort order. Defaults to alphabetical path sort if not given.
+ H:
+ H:   Possible values for order:
+ H:   p: by path
+ H:   l: by last played time
+ H:   s: by score (implies -a)
+ H:   n: by num played count
+ H:   f: by frequency
+ H:   c: by number of channels
+ H:   i: by image id
+ H:   y: by lyrics id
+ H:   b: by bit rate
+ H:   d: by duration
+ H:   a: by audio format
  ---
  N: lsatt
  P: AFS_READ
@@@ -285,7 -287,6 +287,7 @@@ N: mv@member
  O: int com_mv@member@(struct command_context *cc);
  P: AFS_READ | AFS_WRITE
  D: Rename a blob of type @member@.
 -U: mv@member@ old_@member@_name new_@member@_name
 -H: Rename the blob identified by old_@member@_name to new_@member@_name.
 -H: This command fails if new_@member@_name already exists.
 +U: mv@member@ source_@member@_name dest_@member@_name
 +H: Rename the blob identified by the source blob name to the destination blob
 +H: name. The command fails if the source does not exist, or if the destination
 +H: already exists.
diff --combined aft.c
index bf86acf80ca32a601a2e68cfd7b7a691ac3ba92a,cfb1f69773a73a2f6401bf2b93bfc1be21217412..102856bafd6ecf319f50d696149dc800dd1fab5a
--- 1/aft.c
--- 2/aft.c
+++ b/aft.c
@@@ -1439,18 -1439,26 +1439,26 @@@ int com_ls(struct command_context *cc
                        i++;
                        break;
                }
+               /*
+                * Compatibility: Prior to 0.5.5 it was necessary to specify
+                * the listing mode without the '=' character as in -lv, for
+                * example. Now the variant with '=' is preferred and
+                * documented but we still accept the old way to specify the
+                * listing mode.
+                *
+                * Support for the legacy syntax can be dropped at 0.6.0
+                * or later.
+                */
                if (!strncmp(arg, "-l", 2)) {
-                       if (!*(arg + 2)) {
-                               mode = LS_MODE_LONG;
-                               continue;
-                       }
-                       if (*(arg + 3))
-                               return -E_AFT_SYNTAX;
-                       switch(*(arg + 2)) {
+                       arg += 2;
+                       if (*arg == '=')
+                               arg++;
+                       switch (*arg) {
                        case 's':
                                mode = LS_MODE_SHORT;
                                continue;
                        case 'l':
+                       case '\0':
                                mode = LS_MODE_LONG;
                                continue;
                        case 'v':
                        flags |= LS_FLAG_UNIXDATE;
                        continue;
                }
+               /* The compatibility remark above applies also to -s. */
                if (!strncmp(arg, "-s", 2)) {
-                       if (!*(arg + 2) || *(arg + 3))
-                               return -E_AFT_SYNTAX;
-                       switch(*(arg + 2)) {
+                       arg += 2;
+                       if (*arg == '=')
+                               arg++;
+                       switch (*arg) {
                        case 'p':
                                sort = LS_SORT_BY_PATH;
                                continue;
@@@ -1563,16 -1573,16 +1573,16 @@@ static struct osl_row *find_hash_sister
  
  /** The format of the data stored by save_audio_file_data(). */
  enum com_add_buffer_offsets {
 -      /** afhi (if present) starts here. */
 +      /* afhi (if present) starts at this offset. */
        CAB_AFHI_OFFSET_POS = 0,
        /** Start of the chunk table (if present). */
 -      CAB_CHUNKS_OFFSET_POS = 2,
 -      /** Audio format id. */
 -      CAB_AUDIO_FORMAT_OFFSET = 4,
 +      CAB_CHUNKS_OFFSET_POS = 4,
        /** Flags given to the add command. */
 -      CAB_FLAGS_OFFSET = 5,
 +      CAB_FLAGS_OFFSET = 8,
 +      /** Audio format id. */
 +      CAB_AUDIO_FORMAT_ID_OFFSET = 12,
        /** The hash of the audio file being added. */
 -      CAB_HASH_OFFSET = 9,
 +      CAB_HASH_OFFSET = 13,
        /** Start of the path of the audio file. */
        CAB_PATH_OFFSET = (CAB_HASH_OFFSET + HASH_SIZE),
  };
@@@ -1593,23 -1603,27 +1603,23 @@@ static void save_add_callback_buffer(un
        size_t size = CAB_PATH_OFFSET + path_len + afhi_size
                + sizeof_chunk_table(afhi);
        char *buf = para_malloc(size);
 -      uint16_t pos;
 -
 -      write_u8(buf + CAB_AUDIO_FORMAT_OFFSET, audio_format_num);
 -      write_u32(buf + CAB_FLAGS_OFFSET, flags);
 -
 -      memcpy(buf + CAB_HASH_OFFSET, hash, HASH_SIZE);
 -      strcpy(buf + CAB_PATH_OFFSET, path);
 +      uint32_t pos;
  
        pos = CAB_PATH_OFFSET + path_len;
 -      PARA_DEBUG_LOG("size: %zu, afhi starts at %d\n", size, pos);
 -      PARA_DEBUG_LOG("last afhi byte: %p, pos %zu\n", buf + pos + afhi_size - 1,
 -              pos + afhi_size - 1);
 -      write_u16(buf + CAB_AFHI_OFFSET_POS, pos);
 +      write_u32(buf + CAB_AFHI_OFFSET_POS, pos);
        save_afhi(afhi, buf + pos);
 -
        pos += afhi_size;
 -      PARA_DEBUG_LOG("size: %zu, chunks start at %d\n", size, pos);
 -      write_u16(buf + CAB_CHUNKS_OFFSET_POS, pos);
 +
 +      write_u32(buf + CAB_CHUNKS_OFFSET_POS, pos);
        if (afhi)
                save_chunk_table(afhi, buf + pos);
 -      PARA_DEBUG_LOG("last byte in buf: %p\n", buf + size - 1);
 +
 +      write_u32(buf + CAB_FLAGS_OFFSET, flags);
 +      write_u8(buf + CAB_AUDIO_FORMAT_ID_OFFSET, audio_format_num);
 +
 +      memcpy(buf + CAB_HASH_OFFSET, hash, HASH_SIZE);
 +      strcpy(buf + CAB_PATH_OFFSET, path);
 +
        obj->data = buf;
        obj->size = size;
  }
@@@ -1753,8 -1767,8 +1763,8 @@@ static void com_add_callback(int fd, co
                        goto out;
        }
        /* no hs or force mode, child must have sent afhi */
 -      afhi_offset = read_u16(buf + CAB_AFHI_OFFSET_POS);
 -      chunks_offset = read_u16(buf + CAB_CHUNKS_OFFSET_POS);
 +      afhi_offset = read_u32(buf + CAB_AFHI_OFFSET_POS);
 +      chunks_offset = read_u32(buf + CAB_CHUNKS_OFFSET_POS);
  
        objs[AFTCOL_AFHI].data = buf + afhi_offset;
        objs[AFTCOL_AFHI].size = chunks_offset - afhi_offset;
                        goto out;
        }
        default_afsi.last_played = time(NULL) - 365 * 24 * 60 * 60;
 -      default_afsi.audio_format_id = read_u8(buf + CAB_AUDIO_FORMAT_OFFSET);
 +      default_afsi.audio_format_id = read_u8(buf + CAB_AUDIO_FORMAT_ID_OFFSET);
  
        objs[AFTCOL_AFSI].data = &afsi_buf;
        objs[AFTCOL_AFSI].size = AFSI_SIZE;