##// END OF EJS Templates
Merge with TAH.
Bryan O'Sullivan -
r894:62ec6657 merge default
parent child Browse files
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 an open interval. This means that a range of 3:5
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 self.map[f] = (state, s.st_mode, s.st_size, s.st_mtime)
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 = None, match = util.always):
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, changed, added, unknown = [], [], [], []
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 if fn in dc:
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 changed.append(fn)
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 changed.append(fn)
575 modified.append(fn)
571 elif c[1] != s.st_mode or c[3] != s.st_mtime:
576 elif c[3] != s.st_mtime:
572 lookup.append(fn)
577 lookup.append(fn)
573 else:
578 else:
574 if match(fn): unknown.append(fn)
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 and mode == 'm':
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 3aa14bbc23d9 file1
31 diff -r f4d7a8c73d23 file1
32 --- a/file1
32 --- a/file1
33 +++ b/file1
33 +++ b/file1
34 @@ -1,2 +1,6 @@
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