Show More
@@ -7,13 +7,13 | |||
|
7 | 7 | |
|
8 | 8 | use crate::{ |
|
9 | 9 | dirstate::{parsers::PARENT_SIZE, EntryState}, |
|
10 | pack_dirstate, parse_dirstate, | |
|
11 | utils::copy_into_array, | |
|
12 | CopyMap, DirsIterable, DirsMultiset, DirstateEntry, DirstateError, | |
|
13 | DirstateMapError, DirstateParents, DirstateParseError, StateMap, | |
|
10 | pack_dirstate, parse_dirstate, CopyMap, DirsIterable, DirsMultiset, | |
|
11 | DirstateEntry, DirstateError, DirstateMapError, DirstateParents, | |
|
12 | DirstateParseError, StateMap, | |
|
14 | 13 | }; |
|
15 | 14 | use core::borrow::Borrow; |
|
16 | 15 | use std::collections::{HashMap, HashSet}; |
|
16 | use std::convert::TryInto; | |
|
17 | 17 | use std::iter::FromIterator; |
|
18 | 18 | use std::ops::Deref; |
|
19 | 19 | use std::time::Duration; |
@@ -260,10 +260,10 impl DirstateMap { | |||
|
260 | 260 | let parents; |
|
261 | 261 | if file_contents.len() == PARENT_SIZE * 2 { |
|
262 | 262 | parents = DirstateParents { |
|
263 |
p1: |
|
|
264 | p2: copy_into_array( | |
|
265 | &file_contents[PARENT_SIZE..PARENT_SIZE * 2], | |
|
266 | ), | |
|
263 | p1: file_contents[..PARENT_SIZE].try_into().unwrap(), | |
|
264 | p2: file_contents[PARENT_SIZE..PARENT_SIZE * 2] | |
|
265 | .try_into() | |
|
266 | .unwrap(), | |
|
267 | 267 | }; |
|
268 | 268 | } else if file_contents.is_empty() { |
|
269 | 269 | parents = DirstateParents { |
@@ -5,7 +5,6 | |||
|
5 | 5 | |
|
6 | 6 | use crate::{ |
|
7 | 7 | dirstate::{CopyMap, EntryState, StateMap}, |
|
8 | utils::copy_into_array, | |
|
9 | 8 | DirstateEntry, DirstatePackError, DirstateParents, DirstateParseError, |
|
10 | 9 | }; |
|
11 | 10 | use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; |
@@ -31,8 +30,8 pub fn parse_dirstate( | |||
|
31 | 30 | |
|
32 | 31 | let mut curr_pos = PARENT_SIZE * 2; |
|
33 | 32 | let parents = DirstateParents { |
|
34 |
p1: |
|
|
35 |
p2: |
|
|
33 | p1: contents[..PARENT_SIZE].try_into().unwrap(), | |
|
34 | p2: contents[PARENT_SIZE..curr_pos].try_into().unwrap(), | |
|
36 | 35 | }; |
|
37 | 36 | |
|
38 | 37 | while curr_pos < contents.len() { |
@@ -9,23 +9,6 | |||
|
9 | 9 | |
|
10 | 10 | pub mod files; |
|
11 | 11 | |
|
12 | use std::convert::AsMut; | |
|
13 | ||
|
14 | /// Takes a slice and copies it into an array. | |
|
15 | /// | |
|
16 | /// # Panics | |
|
17 | /// | |
|
18 | /// Will panic if the slice and target array don't have the same length. | |
|
19 | pub fn copy_into_array<A, T>(slice: &[T]) -> A | |
|
20 | where | |
|
21 | A: Sized + Default + AsMut<[T]>, | |
|
22 | T: Copy, | |
|
23 | { | |
|
24 | let mut a = Default::default(); | |
|
25 | <A as AsMut<[T]>>::as_mut(&mut a).copy_from_slice(slice); | |
|
26 | a | |
|
27 | } | |
|
28 | ||
|
29 | 12 | /// Replaces the `from` slice with the `to` slice inside the `buf` slice. |
|
30 | 13 | /// |
|
31 | 14 | /// # Examples |
@@ -24,7 +24,7 use crate::{ | |||
|
24 | 24 | ref_sharing::PySharedState, |
|
25 | 25 | }; |
|
26 | 26 | use hg::{ |
|
27 |
|
|
|
27 | DirsIterable, DirsMultiset, DirstateEntry, | |
|
28 | 28 | DirstateMap as RustDirstateMap, DirstateParents, DirstateParseError, |
|
29 | 29 | EntryState, |
|
30 | 30 | }; |
@@ -239,8 +239,9 py_class!(pub class DirstateMap |py| { | |||
|
239 | 239 | } |
|
240 | 240 | |
|
241 | 241 | def setparents(&self, p1: PyObject, p2: PyObject) -> PyResult<PyObject> { |
|
242 | let p1 = copy_into_array(p1.extract::<PyBytes>(py)?.data(py)); | |
|
243 |
let p |
|
|
242 | // TODO: don't panic; raise Python exception instead. | |
|
243 | let p1 = p1.extract::<PyBytes>(py)?.data(py).try_into().unwrap(); | |
|
244 | let p2 = p2.extract::<PyBytes>(py)?.data(py).try_into().unwrap(); | |
|
244 | 245 | |
|
245 | 246 | self.inner(py) |
|
246 | 247 | .borrow_mut() |
@@ -274,8 +275,9 py_class!(pub class DirstateMap |py| { | |||
|
274 | 275 | ) -> PyResult<PyBytes> { |
|
275 | 276 | let now = Duration::new(now.extract(py)?, 0); |
|
276 | 277 | let parents = DirstateParents { |
|
277 | p1: copy_into_array(p1.extract::<PyBytes>(py)?.data(py)), | |
|
278 |
p |
|
|
278 | // TODO: don't panic; raise Python exception instead. | |
|
279 | p1: p1.extract::<PyBytes>(py)?.data(py).try_into().unwrap(), | |
|
280 | p2: p2.extract::<PyBytes>(py)?.data(py).try_into().unwrap(), | |
|
279 | 281 | }; |
|
280 | 282 | |
|
281 | 283 | match self.borrow_mut(py)?.pack(parents, now) { |
@@ -15,10 +15,11 use cpython::{ | |||
|
15 | 15 | PythonObject, ToPyObject, |
|
16 | 16 | }; |
|
17 | 17 | use hg::{ |
|
18 |
pack_dirstate, parse_dirstate, |
|
|
18 | pack_dirstate, parse_dirstate, DirstateEntry, | |
|
19 | 19 | DirstatePackError, DirstateParents, DirstateParseError, PARENT_SIZE, |
|
20 | 20 | }; |
|
21 | 21 | use std::collections::HashMap; |
|
22 | use std::convert::TryInto; | |
|
22 | 23 | |
|
23 | 24 | use libc::c_char; |
|
24 | 25 | |
@@ -120,8 +121,8 fn pack_dirstate_wrapper( | |||
|
120 | 121 | &mut dirstate_map, |
|
121 | 122 | &copies?, |
|
122 | 123 | DirstateParents { |
|
123 |
p1: |
|
|
124 |
p2: |
|
|
124 | p1: p1.try_into().unwrap(), | |
|
125 | p2: p2.try_into().unwrap(), | |
|
125 | 126 | }, |
|
126 | 127 | Duration::from_secs(now.as_object().extract::<u64>(py)?), |
|
127 | 128 | ) { |
General Comments 0
You need to be logged in to leave comments.
Login now