Skip to content

Commit 95b845c

Browse files
committed
🐛 Fix jsonl format ignoring -@ and -e flags
The jsonl format was always outputting `acl` and `xattr` fields as empty arrays regardless of whether -e (acl) or -@ (xattr) flags were specified. This was inconsistent with the `fflags` field behavior. Now these fields use `skip_serializing_if` to omit them entirely when not requested, matching the expected behavior.
1 parent 0368929 commit 95b845c

3 files changed

Lines changed: 65 additions & 63 deletions

File tree

cli/src/command/list.rs

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,8 +1123,10 @@ struct FileInfo<'a> {
11231123
accessed: String,
11241124
#[serde(skip_serializing_if = "Option::is_none")]
11251125
fflags: Option<&'a [String]>,
1126-
acl: Vec<AclEntry>,
1127-
xattr: Vec<XAttr<'a>>,
1126+
#[serde(skip_serializing_if = "Option::is_none")]
1127+
acl: Option<Vec<AclEntry>>,
1128+
#[serde(skip_serializing_if = "Option::is_none")]
1129+
xattr: Option<Vec<XAttr<'a>>>,
11281130
}
11291131

11301132
#[derive(Serialize, Debug)]
@@ -1145,6 +1147,8 @@ fn json_line_entries_to(
11451147
mut out: impl Write,
11461148
) -> anyhow::Result<()> {
11471149
let show_fflags = options.show_fflags;
1150+
let show_acl = options.show_acl;
1151+
let show_xattr = options.show_xattr;
11481152
let entries = entries
11491153
.par_iter()
11501154
.map(|it| {
@@ -1180,27 +1184,25 @@ fn json_line_entries_to(
11801184
accessed: it
11811185
.accessed
11821186
.map_or_else(String::new, |d| datetime(TimeFormat::Long, d)),
1183-
fflags: if show_fflags {
1184-
Some(it.fflags.as_slice())
1185-
} else {
1186-
None
1187-
},
1188-
acl: it
1189-
.acl
1190-
.iter()
1191-
.map(|(platform, ace)| AclEntry {
1192-
platform: platform.to_string(),
1193-
entries: ace.iter().map(|it| it.to_string()).collect(),
1194-
})
1195-
.collect(),
1196-
xattr: it
1197-
.xattrs
1198-
.iter()
1199-
.map(|x| XAttr {
1200-
key: x.name(),
1201-
value: base64::engine::general_purpose::STANDARD.encode(x.value()),
1202-
})
1203-
.collect(),
1187+
fflags: show_fflags.then(|| it.fflags.as_slice()),
1188+
acl: show_acl.then(|| {
1189+
it.acl
1190+
.iter()
1191+
.map(|(platform, ace)| AclEntry {
1192+
platform: platform.to_string(),
1193+
entries: ace.iter().map(|it| it.to_string()).collect(),
1194+
})
1195+
.collect()
1196+
}),
1197+
xattr: show_xattr.then(|| {
1198+
it.xattrs
1199+
.iter()
1200+
.map(|x| XAttr {
1201+
key: x.name(),
1202+
value: base64::engine::general_purpose::STANDARD.encode(x.value()),
1203+
})
1204+
.collect()
1205+
}),
12041206
}
12051207
})
12061208
.collect::<Vec<_>>();

cli/tests/cli/list/option_format_jsonl.rs

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,23 @@ fn list_format_jsonl() {
2222
.assert();
2323

2424
assert.stdout(concat!(
25-
r#"{"filename":"raw/images/icon.png","permissions":"---------- ","owner":"","group":"","raw_size":51475,"size":38437,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
25+
r#"{"filename":"raw/images/icon.png","permissions":"---------- ","owner":"","group":"","raw_size":51475,"size":38437,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
2626
"\n",
27-
r#"{"filename":"raw/empty.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":9,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
27+
r#"{"filename":"raw/empty.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":9,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
2828
"\n",
29-
r#"{"filename":"raw/images/icon.svg","permissions":"---------- ","owner":"","group":"","raw_size":1984,"size":789,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
29+
r#"{"filename":"raw/images/icon.svg","permissions":"---------- ","owner":"","group":"","raw_size":1984,"size":789,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
3030
"\n",
31-
r#"{"filename":"raw/first/second/third/pna.txt","permissions":"---------- ","owner":"","group":"","raw_size":3,"size":12,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
31+
r#"{"filename":"raw/first/second/third/pna.txt","permissions":"---------- ","owner":"","group":"","raw_size":3,"size":12,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
3232
"\n",
33-
r#"{"filename":"raw/pna/empty.pna","permissions":"---------- ","owner":"","group":"","raw_size":40,"size":49,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
33+
r#"{"filename":"raw/pna/empty.pna","permissions":"---------- ","owner":"","group":"","raw_size":40,"size":49,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
3434
"\n",
35-
r#"{"filename":"raw/parent/child.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":9,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
35+
r#"{"filename":"raw/parent/child.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":9,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
3636
"\n",
37-
r#"{"filename":"raw/pna/nest.pna","permissions":"---------- ","owner":"","group":"","raw_size":57032,"size":57041,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
37+
r#"{"filename":"raw/pna/nest.pna","permissions":"---------- ","owner":"","group":"","raw_size":57032,"size":57041,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
3838
"\n",
39-
r#"{"filename":"raw/text.txt","permissions":"---------- ","owner":"","group":"","raw_size":10,"size":19,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
39+
r#"{"filename":"raw/text.txt","permissions":"---------- ","owner":"","group":"","raw_size":10,"size":19,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
4040
"\n",
41-
r#"{"filename":"raw/images/icon.bmp","permissions":"---------- ","owner":"","group":"","raw_size":4194442,"size":17183,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
41+
r#"{"filename":"raw/images/icon.bmp","permissions":"---------- ","owner":"","group":"","raw_size":4194442,"size":17183,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
4242
"\n",
4343
));
4444
}
@@ -65,23 +65,23 @@ fn list_format_jsonl_solid() {
6565
.assert();
6666

6767
assert.stdout(concat!(
68-
r#"{"filename":"raw/empty.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":0,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
68+
r#"{"filename":"raw/empty.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":0,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":""}"#,
6969
"\n",
70-
r#"{"filename":"raw/parent/child.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":0,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
70+
r#"{"filename":"raw/parent/child.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":0,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":""}"#,
7171
"\n",
72-
r#"{"filename":"raw/images/icon.svg","permissions":"---------- ","owner":"","group":"","raw_size":1984,"size":1984,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
72+
r#"{"filename":"raw/images/icon.svg","permissions":"---------- ","owner":"","group":"","raw_size":1984,"size":1984,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":""}"#,
7373
"\n",
74-
r#"{"filename":"raw/first/second/third/pna.txt","permissions":"---------- ","owner":"","group":"","raw_size":3,"size":3,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
74+
r#"{"filename":"raw/first/second/third/pna.txt","permissions":"---------- ","owner":"","group":"","raw_size":3,"size":3,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":""}"#,
7575
"\n",
76-
r#"{"filename":"raw/images/icon.png","permissions":"---------- ","owner":"","group":"","raw_size":51475,"size":51475,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
76+
r#"{"filename":"raw/images/icon.png","permissions":"---------- ","owner":"","group":"","raw_size":51475,"size":51475,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":""}"#,
7777
"\n",
78-
r#"{"filename":"raw/pna/nest.pna","permissions":"---------- ","owner":"","group":"","raw_size":57032,"size":57032,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
78+
r#"{"filename":"raw/pna/nest.pna","permissions":"---------- ","owner":"","group":"","raw_size":57032,"size":57032,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":""}"#,
7979
"\n",
80-
r#"{"filename":"raw/text.txt","permissions":"---------- ","owner":"","group":"","raw_size":10,"size":10,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
80+
r#"{"filename":"raw/text.txt","permissions":"---------- ","owner":"","group":"","raw_size":10,"size":10,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":""}"#,
8181
"\n",
82-
r#"{"filename":"raw/pna/empty.pna","permissions":"---------- ","owner":"","group":"","raw_size":40,"size":40,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
82+
r#"{"filename":"raw/pna/empty.pna","permissions":"---------- ","owner":"","group":"","raw_size":40,"size":40,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":""}"#,
8383
"\n",
84-
r#"{"filename":"raw/images/icon.bmp","permissions":"---------- ","owner":"","group":"","raw_size":4194442,"size":4194442,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
84+
r#"{"filename":"raw/images/icon.bmp","permissions":"---------- ","owner":"","group":"","raw_size":4194442,"size":4194442,"encryption":"-","compression":"zstandard(solid)","created":"","modified":"","accessed":""}"#,
8585
"\n",
8686
));
8787
}
@@ -109,9 +109,9 @@ fn list_format_jsonl_with_filter() {
109109
.assert();
110110

111111
assert.stdout(concat!(
112-
r#"{"filename":"raw/empty.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":9,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
112+
r#"{"filename":"raw/empty.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":9,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
113113
"\n",
114-
r#"{"filename":"raw/text.txt","permissions":"---------- ","owner":"","group":"","raw_size":10,"size":19,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
114+
r#"{"filename":"raw/text.txt","permissions":"---------- ","owner":"","group":"","raw_size":10,"size":19,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
115115
"\n",
116116
));
117117
}
@@ -142,11 +142,11 @@ fn list_format_jsonl_with_directory_filter() {
142142
.assert();
143143

144144
assert.stdout(concat!(
145-
r#"{"filename":"raw/images/icon.png","permissions":"---------- ","owner":"","group":"","raw_size":51475,"size":38437,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
145+
r#"{"filename":"raw/images/icon.png","permissions":"---------- ","owner":"","group":"","raw_size":51475,"size":38437,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
146146
"\n",
147-
r#"{"filename":"raw/images/icon.svg","permissions":"---------- ","owner":"","group":"","raw_size":1984,"size":789,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
147+
r#"{"filename":"raw/images/icon.svg","permissions":"---------- ","owner":"","group":"","raw_size":1984,"size":789,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
148148
"\n",
149-
r#"{"filename":"raw/images/icon.bmp","permissions":"---------- ","owner":"","group":"","raw_size":4194442,"size":17183,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
149+
r#"{"filename":"raw/images/icon.bmp","permissions":"---------- ","owner":"","group":"","raw_size":4194442,"size":17183,"encryption":"-","compression":"zstandard","created":"","modified":"","accessed":""}"#,
150150
"\n",
151151
));
152152
}
@@ -174,23 +174,23 @@ fn list_format_jsonl_encrypted() {
174174
.assert();
175175

176176
assert.stdout(concat!(
177-
r#"{"filename":"raw/empty.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":25,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
177+
r#"{"filename":"raw/empty.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":25,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":""}"#,
178178
"\n",
179-
r#"{"filename":"raw/images/icon.png","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":35142,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
179+
r#"{"filename":"raw/images/icon.png","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":35142,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":""}"#,
180180
"\n",
181-
r#"{"filename":"raw/images/icon.svg","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":751,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
181+
r#"{"filename":"raw/images/icon.svg","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":751,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":""}"#,
182182
"\n",
183-
r#"{"filename":"raw/images/icon.bmp","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":13378,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
183+
r#"{"filename":"raw/images/icon.bmp","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":13378,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":""}"#,
184184
"\n",
185-
r#"{"filename":"raw/first/second/third/pna.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":28,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
185+
r#"{"filename":"raw/first/second/third/pna.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":28,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":""}"#,
186186
"\n",
187-
r#"{"filename":"raw/pna/empty.pna","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":65,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
187+
r#"{"filename":"raw/pna/empty.pna","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":65,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":""}"#,
188188
"\n",
189-
r#"{"filename":"raw/pna/nest.pna","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":53757,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
189+
r#"{"filename":"raw/pna/nest.pna","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":53757,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":""}"#,
190190
"\n",
191-
r#"{"filename":"raw/parent/child.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":25,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
191+
r#"{"filename":"raw/parent/child.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":25,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":""}"#,
192192
"\n",
193-
r#"{"filename":"raw/text.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":35,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":"","acl":[],"xattr":[]}"#,
193+
r#"{"filename":"raw/text.txt","permissions":"---------- ","owner":"","group":"","raw_size":0,"size":35,"encryption":"aes(ctr)","compression":"zstandard","created":"","modified":"","accessed":""}"#,
194194
"\n",
195195
));
196196
}

0 commit comments

Comments
 (0)