(repository: &std::path::Path, request: &Value)
| 777 | |
| 778 | #[cfg(unix)] |
| 779 | fn batch_owner_rpc(repository: &std::path::Path, request: &Value) -> std::io::Result<Value> { |
| 780 | let dot = std::fs::canonicalize(Repository::canonical_dot_dir(repository).unwrap())?; |
| 781 | let digest = blake3::hash(dot.to_string_lossy().as_bytes()) |
| 782 | .to_hex() |
| 783 | .to_string(); |
| 784 | let mut stream = std::os::unix::net::UnixStream::connect(format!( |
| 785 | "/tmp/atomic-owner-{}.sock", |
| 786 | &digest[..24] |
| 787 | ))?; |
| 788 | stream.set_read_timeout(Some(Duration::from_secs(10)))?; |
| 789 | stream.set_write_timeout(Some(Duration::from_secs(10)))?; |
| 790 | let frame = serde_json::to_vec( |
| 791 | &serde_json::json!({"version":1,"request_id":"batch-regression","request":request}), |
| 792 | )?; |
| 793 | stream.write_all(&(frame.len() as u32).to_be_bytes())?; |
| 794 | stream.write_all(&frame)?; |
| 795 | let mut len = [0; 4]; |
| 796 | stream.read_exact(&mut len)?; |
| 797 | let len = u32::from_be_bytes(len) as usize; |
| 798 | assert!(len <= 8 * 1024 * 1024); |
| 799 | let mut bytes = vec![0; len]; |
| 800 | stream.read_exact(&mut bytes)?; |
| 801 | Ok(serde_json::from_slice(&bytes)?) |
| 802 | } |
| 803 | |
| 804 | #[cfg(unix)] |
| 805 | #[test] |
no test coverage detected