{"record":{"id":"40be74e78ae47efe","repo":"Morganamilo/paru","slug":"only-one-operation-may-be-used-at-a-time","errorCode":null,"errorMessage":"only one operation may be used at a time","messagePattern":"only one operation may be used at a time","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/config.rs","lineNumber":682,"sourceCode":"\n    pub fn parse_args<S: AsRef<str>, I: IntoIterator<Item = S>>(&mut self, iter: I) -> Result<()> {\n        let iter = iter.into_iter();\n        let mut iter = iter.peekable();\n        let mut op_count = 0;\n        let mut end_of_ops = false;\n\n        if let Ok(aurdest) = var(\"AURDEST\") {\n            self.build_dir = aurdest.into();\n        }\n\n        while let Some(arg) = iter.next() {\n            let value = iter.peek().map(|s| s.as_ref());\n            let arg = arg.as_ref();\n            if self.parse_arg(arg, value, &mut op_count, &mut end_of_ops)? {\n                iter.next();\n            }\n\n            ensure!(\n                op_count <= 1,\n                tr!(\"only one operation may be used at a time\")\n            );\n        }\n\n        if let Some((i, _)) = self.targets.iter().enumerate().find(|t| t.1 == \"-\") {\n            self.targets.remove(i);\n            self.parse_stdin()?;\n            reopen_stdin()?;\n        }\n\n        self.args.op = self.op.as_str().to_string();\n        self.args.targets = self.targets.clone();\n        self.args.bin = self.pacman_bin.clone();\n\n        self.globals.op = self.op.as_str().to_string();\n        self.globals.bin = self.pacman_bin.clone();\n","sourceCodeStart":664,"sourceCodeEnd":700,"githubUrl":"https://github.com/Morganamilo/paru/blob/9ac3578807a87858651e81a02586ceb947686e7c/src/config.rs#L664-L700","documentation":"While parsing the command line, paru counts mutually exclusive operations via parse_arg/op_count. If more than one operation flag is supplied (e.g. -S and -Q together), the ensure! fires with this pacman-compatible error.","triggerScenarios":"Invoking paru with two or more operation flags in one command: `paru -Syu -Q`, `paru -Ss -Sl`, `paru -G -S pkg`, including combined short flags like `-Sqi` where both S and Q... (any two op letters) appear.","commonSituations":"Scripting mistakes concatenating operations; muscle-memory combining pacman-style ops that pacman also rejects; users expecting -Qu plus -S behavior in one call.","solutions":["Split into separate invocations, one operation per command: `paru -Syu` then `paru -Qu`.","Inspect combined short flags for accidental extra operation letters (e.g. -Syu vs -Sy).","Fix wrapper scripts to pass a single operation flag set."],"exampleFix":"# before\nparu -Syu -Q\n# after\nparu -Syu\nparu -Qu","handlingStrategy":"validation","validationCode":"let ops = [\"S\",\"Q\",\"G\",\"P\",\"C\",\"L\",\"G\"].iter().filter(|op| args.iter().any(|a| a.starts_with('-') && a.contains(op))).count();\nif ops > 1 { panic!(\"only one operation may be used at a time\"); }","typeGuard":null,"tryCatchPattern":"// wrapper that validates before exec\nlet ops: usize = count_operation_flags(&argv);\nif ops > 1 {\n    eprintln!(\"only one operation may be used at a time\");\n    std::process::exit(1);\n}","preventionTips":["One operation flag per invocation; chain with && in scripts instead.","Double-check combined short flags like -Syu for stray op letters.","Keep wrapper scripts restricted to a single fixed operation."],"tags":["cli","arguments","pacman"],"backgroundTag":"mutually-exclusive-flags","analyzedSha":"9ac3578807a87858651e81a02586ceb947686e7c","analyzedAt":"2026-09-12T04:57:59.861Z","contentChangedAt":"2026-09-12T04:57:59.861Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}