Show More
@@ -509,7 +509,7 b' SPECIFYING MULTIPLE REVISIONS' | |||||
509 | If BEGIN is greater than END, revisions are treated in reverse |
|
509 | If BEGIN is greater than END, revisions are treated in reverse | |
510 | order. |
|
510 | order. | |
511 |
|
511 | |||
512 |
A range acts as a |
|
512 | A range acts as a closed interval. This means that a range of 3:5 | |
513 | gives 3, 4 and 5. Similarly, a range of 4:2 gives 4, 3, and 2. |
|
513 | gives 3, 4 and 5. Similarly, a range of 4:2 gives 4, 3, and 2. | |
514 |
|
514 | |||
515 | ENVIRONMENT VARIABLES |
|
515 | ENVIRONMENT VARIABLES |
@@ -397,7 +397,7 b' class dirstate:' | |||||
397 | def copied(self, file): |
|
397 | def copied(self, file): | |
398 | return self.copies.get(file, None) |
|
398 | return self.copies.get(file, None) | |
399 |
|
399 | |||
400 | def update(self, files, state): |
|
400 | def update(self, files, state, **kw): | |
401 | ''' current states: |
|
401 | ''' current states: | |
402 | n normal |
|
402 | n normal | |
403 | m needs merging |
|
403 | m needs merging | |
@@ -412,7 +412,9 b' class dirstate:' | |||||
412 | self.map[f] = ('r', 0, 0, 0) |
|
412 | self.map[f] = ('r', 0, 0, 0) | |
413 | else: |
|
413 | else: | |
414 | s = os.stat(os.path.join(self.root, f)) |
|
414 | s = os.stat(os.path.join(self.root, f)) | |
415 |
se |
|
415 | st_size = kw.get('st_size', s.st_size) | |
|
416 | st_mtime = kw.get('st_mtime', s.st_mtime) | |||
|
417 | self.map[f] = (state, s.st_mode, st_size, st_mtime) | |||
416 |
|
418 | |||
417 | def forget(self, files): |
|
419 | def forget(self, files): | |
418 | if not files: return |
|
420 | if not files: return | |
@@ -544,36 +546,44 b' class dirstate:' | |||||
544 | if match(fn): |
|
546 | if match(fn): | |
545 | yield src, fn |
|
547 | yield src, fn | |
546 |
|
548 | |||
547 |
def changes(self, files |
|
549 | def changes(self, files=None, match=util.always): | |
548 | self.read() |
|
550 | self.read() | |
549 | if not files: |
|
551 | if not files: | |
550 | dc = self.map.copy() |
|
552 | dc = self.map.copy() | |
551 | else: |
|
553 | else: | |
552 | dc = self.filterfiles(files) |
|
554 | dc = self.filterfiles(files) | |
553 |
lookup, |
|
555 | lookup, modified, added, unknown = [], [], [], [] | |
|
556 | removed, deleted = [], [] | |||
554 |
|
557 | |||
555 | for src, fn in self.walk(files, match, dc=dc): |
|
558 | for src, fn in self.walk(files, match, dc=dc): | |
556 | try: s = os.stat(os.path.join(self.root, fn)) |
|
559 | try: | |
557 | except: continue |
|
560 | s = os.stat(os.path.join(self.root, fn)) | |
558 |
|
561 | except OSError: | ||
559 |
|
|
562 | continue | |
560 | c = dc[fn] |
|
563 | if not stat.S_ISREG(s.st_mode): | |
|
564 | continue | |||
|
565 | c = dc.get(fn) | |||
|
566 | if c: | |||
561 | del dc[fn] |
|
567 | del dc[fn] | |
562 |
|
||||
563 | if c[0] == 'm': |
|
568 | if c[0] == 'm': | |
564 |
|
|
569 | modified.append(fn) | |
565 | elif c[0] == 'a': |
|
570 | elif c[0] == 'a': | |
566 | added.append(fn) |
|
571 | added.append(fn) | |
567 | elif c[0] == 'r': |
|
572 | elif c[0] == 'r': | |
568 | unknown.append(fn) |
|
573 | unknown.append(fn) | |
569 | elif c[2] != s.st_size or (c[1] ^ s.st_mode) & 0100: |
|
574 | elif c[2] != s.st_size or (c[1] ^ s.st_mode) & 0100: | |
570 |
|
|
575 | modified.append(fn) | |
571 |
elif |
|
576 | elif c[3] != s.st_mtime: | |
572 | lookup.append(fn) |
|
577 | lookup.append(fn) | |
573 | else: |
|
578 | else: | |
574 |
|
|
579 | unknown.append(fn) | |
575 |
|
580 | |||
576 | return (lookup, changed, added, filter(match, dc.keys()), unknown) |
|
581 | for fn, c in [(fn, c) for fn, c in dc.items() if match(fn)]: | |
|
582 | if c[0] == 'r': | |||
|
583 | removed.append(fn) | |||
|
584 | else: | |||
|
585 | deleted.append(fn) | |||
|
586 | return (lookup, modified, added, removed + deleted, unknown) | |||
577 |
|
587 | |||
578 | # used to avoid circular references so destructors work |
|
588 | # used to avoid circular references so destructors work | |
579 | def opener(base): |
|
589 | def opener(base): | |
@@ -1624,10 +1634,20 b' class localrepository:' | |||||
1624 | m, o, flag = merge[f] |
|
1634 | m, o, flag = merge[f] | |
1625 | self.merge3(f, m, o) |
|
1635 | self.merge3(f, m, o) | |
1626 | util.set_exec(self.wjoin(f), flag) |
|
1636 | util.set_exec(self.wjoin(f), flag) | |
1627 |
if moddirstate |
|
1637 | if moddirstate: | |
1628 | # only update dirstate on branch merge, otherwise we |
|
1638 | if mode == 'm': | |
1629 | # could mark files with changes as unchanged |
|
1639 | # only update dirstate on branch merge, otherwise we | |
1630 | self.dirstate.update([f], mode) |
|
1640 | # could mark files with changes as unchanged | |
|
1641 | self.dirstate.update([f], mode) | |||
|
1642 | elif p2 == nullid: | |||
|
1643 | # update dirstate from parent1's manifest | |||
|
1644 | m1n = self.changelog.read(p1)[0] | |||
|
1645 | m1 = self.manifest.read(m1n) | |||
|
1646 | f_len = len(self.file(f).read(m1[f])) | |||
|
1647 | self.dirstate.update([f], mode, st_size=f_len, st_mtime=0) | |||
|
1648 | else: | |||
|
1649 | self.ui.warn("Second parent without branch merge!?\n" | |||
|
1650 | "Dirstate for file %s may be wrong.\n" % f) | |||
1631 |
|
1651 | |||
1632 | remove.sort() |
|
1652 | remove.sort() | |
1633 | for f in remove: |
|
1653 | for f in remove: |
@@ -26,7 +26,6 b' 3aa14bbc23d9 tip' | |||||
26 | + hg update |
|
26 | + hg update | |
27 | merging file1 |
|
27 | merging file1 | |
28 | + hg diff |
|
28 | + hg diff | |
29 | FIXME: This is a known bug: |
|
|||
30 | + hg status |
|
29 | + hg status | |
31 | + hg id |
|
30 | + hg id | |
32 | 3aa14bbc23d9 tip |
|
31 | 3aa14bbc23d9 tip |
@@ -4,6 +4,7 b' mkdir t' | |||||
4 | cd t |
|
4 | cd t | |
5 | hg init |
|
5 | hg init | |
6 | echo "added file1" > file1 |
|
6 | echo "added file1" > file1 | |
|
7 | echo "another line of text" >> file1 | |||
7 | echo "added file2" > file2 |
|
8 | echo "added file2" > file2 | |
8 | hg add file1 file2 |
|
9 | hg add file1 file2 | |
9 | hg commit -m "added file1 and file2" -d "0 0" -u user |
|
10 | hg commit -m "added file1 and file2" -d "0 0" -u user |
@@ -3,36 +3,37 b'' | |||||
3 | + hg commit -m added file1 and file2 -d 0 0 -u user |
|
3 | + hg commit -m added file1 and file2 -d 0 0 -u user | |
4 | + hg commit -m changed file1 -d 0 0 -u user |
|
4 | + hg commit -m changed file1 -d 0 0 -u user | |
5 | + hg -q log |
|
5 | + hg -q log | |
6 | 1:3aa14bbc23d90e3f8b5b639b4a43d76509bae76c |
|
6 | 1:f4d7a8c73d231bc078e2a5e791325e55e8a4c252 | |
7 | 0:8633637036c18f021d771208e16ae3508ab81d28 |
|
7 | 0:232e179b3f294d467cfa66e1439bc5b0d44e4a93 | |
8 | + hg id |
|
8 | + hg id | |
9 | 3aa14bbc23d9 tip |
|
9 | f4d7a8c73d23 tip | |
10 | + hg update -C 0 |
|
10 | + hg update -C 0 | |
11 | + hg id |
|
11 | + hg id | |
12 | 8633637036c1 |
|
12 | 232e179b3f29 | |
13 | + hg id |
|
13 | + hg id | |
14 | 8633637036c1+ |
|
14 | 232e179b3f29+ | |
15 | + hg revert |
|
15 | + hg revert | |
16 | + hg diff |
|
16 | + hg diff | |
17 | + hg status |
|
17 | + hg status | |
18 | + hg id |
|
18 | + hg id | |
19 | 8633637036c1 |
|
19 | 232e179b3f29 | |
20 | + hg update |
|
20 | + hg update | |
21 | + hg diff |
|
21 | + hg diff | |
22 | + hg status |
|
22 | + hg status | |
23 | + hg id |
|
23 | + hg id | |
24 | 3aa14bbc23d9 tip |
|
24 | f4d7a8c73d23 tip | |
25 | + hg update -C 0 |
|
25 | + hg update -C 0 | |
26 | + hg update |
|
26 | + hg update | |
27 | merge: warning: conflicts during merge |
|
27 | merge: warning: conflicts during merge | |
28 | merging file1 |
|
28 | merging file1 | |
29 | merging file1 failed! |
|
29 | merging file1 failed! | |
30 | + hg diff |
|
30 | + hg diff | |
31 |
diff -r |
|
31 | diff -r f4d7a8c73d23 file1 | |
32 | --- a/file1 |
|
32 | --- a/file1 | |
33 | +++ b/file1 |
|
33 | +++ b/file1 | |
34 |
@@ -1, |
|
34 | @@ -1,3 +1,7 @@ | |
35 | added file1 |
|
35 | added file1 | |
|
36 | another line of text | |||
36 | +<<<<<<< |
|
37 | +<<<<<<< | |
37 | +changed file1 different |
|
38 | +changed file1 different | |
38 | +======= |
|
39 | +======= | |
@@ -41,20 +42,19 b' diff -r 3aa14bbc23d9 file1' | |||||
41 | + hg status |
|
42 | + hg status | |
42 | M file1 |
|
43 | M file1 | |
43 | + hg id |
|
44 | + hg id | |
44 | 3aa14bbc23d9+ tip |
|
45 | f4d7a8c73d23+ tip | |
45 | + hg revert |
|
46 | + hg revert | |
46 | + hg diff |
|
47 | + hg diff | |
47 | FIXME: This is a known bug: |
|
|||
48 | + hg status |
|
48 | + hg status | |
49 | + hg id |
|
49 | + hg id | |
50 | 3aa14bbc23d9 tip |
|
50 | f4d7a8c73d23 tip | |
51 | + hg revert -r tip |
|
51 | + hg revert -r tip | |
52 | + hg diff |
|
52 | + hg diff | |
53 | + hg status |
|
53 | + hg status | |
54 | + hg id |
|
54 | + hg id | |
55 | 3aa14bbc23d9 tip |
|
55 | f4d7a8c73d23 tip | |
56 | + hg update -C |
|
56 | + hg update -C | |
57 | + hg diff |
|
57 | + hg diff | |
58 | + hg status |
|
58 | + hg status | |
59 | + hg id |
|
59 | + hg id | |
60 | 3aa14bbc23d9 tip |
|
60 | f4d7a8c73d23 tip |
General Comments 0
You need to be logged in to leave comments.
Login now